यदि आप वास्तव में उन कक्षाओं को पुनः प्राप्त करना चाहते हैं जिन्हें आप एक स्ट्रिंग के साथ बनाते हैं, तो आपको उन्हें एक शब्दकोश में संग्रहित (या ठीक से शब्द, संदर्भ ) करना चाहिए । आखिरकार, यह आपकी कक्षाओं को उच्च स्तर पर नाम देने और अवांछित कक्षाओं को उजागर करने से बचने की अनुमति देगा।
उदाहरण, एक गेम से जहां अभिनेता कक्षाएं पायथन में परिभाषित की जाती हैं और आप उपयोगकर्ता इनपुट द्वारा पहुंचने के लिए अन्य सामान्य कक्षाओं से बचना चाहते हैं।
एक और दृष्टिकोण (जैसे नीचे दिए गए उदाहरण में) एक पूरी नई कक्षा बनाना चाहता है, जो 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ताकि आप अपने द्वारा किए गए सभी वर्गों को कभी न खोएं: ^)