Sınıfın içinden statik bir yöntem kullanmaya çalıştığımda ve yerleşik staticmethodiş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 ...