আপনি যদি স্ট্রিং দিয়ে তৈরি ক্লাসগুলি সত্যিই পুনরুদ্ধার করতে চান তবে আপনার সেগুলি একটি অভিধানে সংরক্ষণ করা উচিত (বা যথাযথভাবে শব্দযুক্ত, রেফারেন্স )। সর্বোপরি, এটি আপনার ক্লাসগুলির উচ্চতর স্তরে নাম রাখার এবং অযাচিত ক্লাসগুলি প্রকাশ করা এড়াতেও অনুমতি দেবে।
উদাহরণস্বরূপ, এমন একটি গেম থেকে যেখানে অভিনেতা ক্লাসগুলি পাইথনে সংজ্ঞায়িত করা হয় এবং আপনি অন্যান্য সাধারণ ক্লাসগুলি ব্যবহারকারীর ইনপুট দ্বারা এড়াতে চান।
অন্য পদ্ধতির (নীচের উদাহরণের মতো) একটি সম্পূর্ণ নতুন শ্রেণি তৈরি করা উচিত যা dictউপরের অংশটিকে ধারণ করে । এটি হবে:
- একাধিক শ্রেণীর ধারককে আরও সহজ সংগঠনের জন্য তৈরি করার মঞ্জুরি দিন (যেমন, অভিনেতা শ্রেণীর জন্য একটি এবং অন্য ধরণের শব্দের জন্য);
- ধারক এবং ক্লাস উভয়ই সহজভাবে অনুষ্ঠিত হচ্ছে তাদের পরিবর্তন করুন;
- এবং আপনি ডিকটিতে ক্লাস যুক্ত করতে ক্লাস পদ্ধতি ব্যবহার করতে পারেন। (যদিও নীচের বিমূর্তটি সত্যই প্রয়োজনীয় নয়, এটি নিছক ... "চিত্রণ" এর জন্য )।
উদাহরণ:
class ClassHolder(object):
def __init__(self):
self.classes = {}
def add_class(self, c):
self.classes[c.__name__] = c
def __getitem__(self, n):
return self.classes[n]
class Foo(object):
def __init__(self):
self.a = 0
def bar(self):
return self.a + 1
class Spam(Foo):
def __init__(self):
self.a = 2
def bar(self):
return self.a + 4
class SomethingDifferent(object):
def __init__(self):
self.a = "Hello"
def add_world(self):
self.a += " World"
def add_word(self, w):
self.a += " " + w
def finish(self):
self.a += "!"
return self.a
aclasses = ClassHolder()
dclasses = ClassHolder()
aclasses.add_class(Foo)
aclasses.add_class(Spam)
dclasses.add_class(SomethingDifferent)
print aclasses
print dclasses
print "======="
print "o"
print aclasses["Foo"]
print aclasses["Spam"]
print "o"
print dclasses["SomethingDifferent"]
print "======="
g = dclasses["SomethingDifferent"]()
g.add_world()
print g.finish()
print "======="
s = []
s.append(aclasses["Foo"]())
s.append(aclasses["Spam"]())
for a in s:
print a.a
print a.bar()
print "--"
print "Done experiment!"
এটি আমাকে ফেরত দেয়:
<__main__.ClassHolder object at 0x02D9EEF0>
<__main__.ClassHolder object at 0x02D9EF30>
=======
o
<class '__main__.Foo'>
<class '__main__.Spam'>
o
<class '__main__.SomethingDifferent'>
=======
Hello World!
=======
0
1
--
2
6
--
Done experiment!
এগুলির সাথে করার জন্য আরেকটি মজাদার পরীক্ষা হ'ল এমন একটি পদ্ধতি যুক্ত করা ClassHolderযাতে আপনি আপনার সমস্ত ক্লাসটি কখনই হারাতে পারেন না pick