जब मैं कक्षा के शरीर के भीतर से एक स्थैतिक विधि का उपयोग करने का प्रयास करता हूं, और staticmethod
इस तरह से डेकोरेटर के रूप में अंतर्निहित फ़ंक्शन का उपयोग करके स्थैतिक विधि को परिभाषित करता हूं :
class Klass(object):
@staticmethod # use as decorator
def _stat_func():
return 42
_ANS = _stat_func() # call the staticmethod
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
मुझे निम्नलिखित त्रुटि मिलती है:
Traceback (most recent call last):<br>
File "call_staticmethod.py", line 1, in <module>
class Klass(object):
File "call_staticmethod.py", line 7, in Klass
_ANS = _stat_func()
TypeError: 'staticmethod' object is not callable
मैं समझता हूं कि ऐसा क्यों हो रहा है (डिस्क्रिप्टर बाइंडिंग) , और इसके चारों ओर काम कर सकते हैं मैन्युअल रूप से _stat_func()
अपने अंतिम उपयोग के बाद एक स्थैतिक रूप में परिवर्तित करना, जैसे:
class Klass(object):
def _stat_func():
return 42
_ANS = _stat_func() # use the non-staticmethod version
_stat_func = staticmethod(_stat_func) # convert function to a static method
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
तो मेरा सवाल है:
क्या बेहतर है, क्लीनर या अधिक "पायथोनिक" के रूप में, इसे पूरा करने के तरीके?
staticmethod
। वे आमतौर पर मॉड्यूल-स्तरीय कार्यों के रूप में अधिक उपयोगी होते हैं, जिस स्थिति में आपकी समस्या कोई समस्या नहीं है।classmethod
दूसरी ओर ...