Ketika saya mencoba menggunakan metode statis dari dalam tubuh kelas, dan mendefinisikan metode statis menggunakan staticmethod
fungsi bawaan sebagai dekorator, seperti ini:
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
Saya mendapatkan kesalahan berikut:
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
Saya mengerti mengapa hal ini terjadi (penjilidan deskriptor) , dan dapat mengatasinya dengan secara manual mengubahnya _stat_func()
menjadi metode statis setelah penggunaan terakhir, seperti:
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
Jadi pertanyaan saya adalah:
Apakah ada cara yang lebih baik, seperti yang lebih bersih atau lebih "Pythonic", untuk mencapai ini?
staticmethod
sama sekali. Mereka biasanya lebih berguna sebagai fungsi tingkat modul, dalam hal ini masalah Anda bukan masalah.classmethod
, di sisi lain ...