आप एक शब्दकोश में अनबाउंडstaticmethod
वस्तुओं भंडारण कर रहे हैं। इस तरह की वस्तुओं (साथ ही classmethod
ऑब्जेक्ट्स, फ़ंक्शंस और property
ऑब्जेक्ट्स) केवल कक्षा या उदाहरण पर एक विशेषता के रूप में नाम तक पहुंचकर descriptor protocol के माध्यम से बाध्य हैं। कक्षा निकाय में staticmethod
ऑब्जेक्ट्स को सीधे एक्सेस करना एक विशेषता पहुंच नहीं है।
या तो (ताकि आप उन्हें विशेषताओं के रूप में का उपयोग) वर्ग बनाने के बाद शब्दकोश बनाने के लिए, या स्पष्ट रूप से बाध्य है, या उन्हें शब्दकोश में भंडारण से पहले मूल कार्य निकालें।
ध्यान दें कि staticmethod
वस्तुओं के लिए 'बाध्यकारी' केवल इसका अर्थ है कि संदर्भ केवल अनदेखा किया जाता है; एक बाध्य staticmethod
अंतर्निहित कार्य अपरिवर्तित लौटाता है।
तो अपने विकल्पों शब्दकोश अनइंडेंट और विशेषताओं का उपयोग करके वर्णनकर्ता प्रोटोकॉल को गति प्रदान करने हैं:
class A(object):
@staticmethod
def open():
return 123
@staticmethod
def proccess():
return 456
A.switch = {
1: A.open,
2: A.proccess,
}
या स्पष्ट रूप से बाध्य करने के लिए, एक डमी संदर्भ में गुजर (जो वैसे भी नजरअंदाज कर दिया जाएगा):
class A(object):
@staticmethod
def open():
return 123
@staticmethod
def proccess():
return 456
switch = {
1: open.__get__(object),
2: proccess.__get__(object),
}
या __func__
विशेषता के साथ सीधे अंतर्निहित समारोह का उपयोग:
class A(object):
@staticmethod
def open():
return 123
@staticmethod
def proccess():
return 456
switch = {
1: open.__func__,
2: proccess.__func__,
}
हालांकि, यदि आप जो करने की कोशिश कर रहे हैं, तो नामस्थान फ़ंक्शंस के समूह के लिए प्रदान करना है, तो आपको पहले स्थान पर क्लास ऑब्जेक्ट का उपयोग नहीं करना चाहिए। कार्यों को मॉड्यूल में रखें। इस तरह आपको पहले स्थान पर staticmethod
सजावट का उपयोग करने की आवश्यकता नहीं है और उन्हें फिर से खोलना नहीं है।
स्रोत
2017-01-29 13:13:59
http://stackoverflow.com/questions/3798835/understanding-get-and-set-and-python-descriptors –
['classmethod' ऑब्जेक्ट का संभावित डुप्लिकेट कॉल करने योग्य नहीं है] (http://stackoverflow.com/ प्रश्न/11058686/classmethod-object-is-not-callable) – melpomene
@melpomene: ओह, मुझे यकीन नहीं है कि मुझे यह क्यों याद आया। –