मुझे उस लैम्ब्डा द्वारा आबादी वाले कुछ वर्ग विशेषताओं की आवश्यकता है और कक्षा में आत्म-संदर्भ देने के लिए स्पष्ट रूप से संभव नहीं है।
लेकिन अपने दिए गए कोड से, सभी लैम्ब्डा जब यह कहा जाता है क्या करेंगे ही फोन MyClass.ClassMethod()
, विधि populating कर जिसका मतलब है कि है ClassMethod
(यह निश्चित रूप से, है, यह सोचते हैं कि ClassMethod
के शरीर वास्तव में नहीं है वह एकमात्र pass
आपने दिखाया है, क्योंकि यदि यह सब कर रहा है तो यह व्यर्थता में एक अभ्यास है)।जब तक आपके कोड का कोई पहलू न हो जो आपको किसी भी चीज़ के लिए इसका उपयोग करने से पहले कक्षा का जिक्र करने से रोकता है, तो आप वर्ग परिभाषा के बाद MyClass.ClassMethod()
क्यों नहीं कॉल कर सकते?
और यदि आप परिभाषा के अंदर कक्षा के गुणों को संशोधित करने का प्रयास कर रहे हैं (यानी, किसी भी तरीके/कार्यों/जो कुछ भी के बाहर, MyClass की परिभाषा के भीतर LAMBDA को कॉल करना), तो आप इसे देखना चाहेंगे दस्तावेज के अनुभाग metaclasses के बारे में।
एक तरफ ध्यान दें, यदि आप कक्षा में विशेषताओं को असाइन करना चाहते हैं, तो आपको कक्षा के शरीर के भीतर भी ऐसा करने की आवश्यकता नहीं है।
>>> class cls(object): # or just "class cls:"
... pass
...
>>> cls.value = 10
>>> cls.name = 'class'
>>> cls.value
10
>>> cls.name
'class'
>>> dir(cls)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
'__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'name', 'value']
एफवाईआई, यह पायथन 3 पर काम करता है, लेकिन पायथन 2 पर नहीं। – kennytm
@ केनीटीएम, यह संयोग से पायथन 3 पर काम करता है। पायथन 3 बाध्य विधि से छुटकारा पा लिया और बस कार्य को वापस कर देता है। यद्यपि यह एक अच्छा डिज़ाइन निर्णय है, लेकिन यह वैचारिक रूप से गलत है, ताकि गलत स्थिरता बनाने के लिए इसका उपयोग किया जा सके। –