कक्षा के शरीर के भीतर, कक्षा का नाम अभी तक परिभाषित नहीं किया गया है, इसलिए यह उपलब्ध नहीं है। क्या आप बस कक्षा का नाम टाइप नहीं कर सकते? शायद आपको समस्या के बारे में और कुछ कहना है ताकि हम आपके लिए समाधान ढूंढ सकें।
मैं आपके लिए यह काम करने के लिए मेटाक्लास बनाउंगा। इसे कक्षा निर्माण समय (अवधारणात्मक रूप से कक्षा के बहुत अंत में: ब्लॉक) पर बुलाया जाता है, और बनाए जा रहे वर्ग में हेरफेर कर सकते हैं। मैं इस परीक्षण नहीं किया:
cls_name = self.__class__.__name__
संपादित करें:
रूप Ned Batcheler
से कहा, यह काम नहीं होगा
class InputAssigningMetaclass(type):
def __new__(cls, name, bases, attrs):
cls.input = get_input(name)
return super(MyType, cls).__new__(cls, name, bases, newattrs)
class MyBaseFoo(object):
__metaclass__ = InputAssigningMetaclass
class foo(MyBaseFoo):
# etc, no need to create 'input'
class foo2(MyBaseFoo):
# etc, no need to create 'input'
स्रोत
2011-08-04 14:28:01
स्पष्ट करने के लिए मुझे क्या करना कोशिश कर रहा हूँ: मैं बना सकते हैं और एक वर्ग चर, 'इनपुट', ** एक विधि के बाहर प्रारंभ करने की आवश्यकता **। मेरे पास छोटे वर्गों का एक गुच्छा है, प्रत्येक को पैरामीटर के रूप में अपने वर्ग नाम का उपयोग करके 'get_input' को कॉल करना होगा। मैं इसे सामान्य बनाने की कोशिश कर रहा हूं इसलिए मुझे प्रत्येक वर्ग में जाना नहीं है (वहां 100 या उससे भी कम) होगा और कक्षा के नाम पर टाइप करें। –
ठीक है, मैंने अपना जवाब एक मेटाक्लास के साथ अपडेट किया है जो मदद करनी चाहिए। –
'इनपुट एसिग्निटिंग मेटाक्लास' में 'सुपर' लाइन में' माईटाइप 'का क्या अर्थ है? –