Sınıfın içinden statik bir yöntem kullanmaya çalıştığımda ve yerleşik staticmethod
işlevi bir dekoratör olarak kullanarak statik yöntemi tanımladığımda, şöyle:
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
Aşağıdaki hatayı alıyorum:
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
Bunun neden olduğunu (tanımlayıcı bağlama) anlıyorum_stat_func()
ve son kullanımından sonra manuel olarak bir statik metoda dönüştürerek bunun etrafında çalışabilir , şöyle:
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
Benim sorum şu:
Daha temiz ya da daha fazla "Pitonik" gibi bunu başarmak için daha iyi yollar var mı?
staticmethod
. Genellikle modül düzeyinde işlevler olarak daha kullanışlıdır, bu durumda sorununuz bir sorun değildir.classmethod
, Öte yandan ...