Khi tôi cố gắng sử dụng một phương thức tĩnh từ bên trong phần thân của lớp và định nghĩa phương thức tĩnh bằng cách sử dụng hàm dựng sẵn staticmethod
làm trang trí, như thế này:
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
Tôi nhận được lỗi sau đây:
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
Tôi hiểu lý do tại sao điều này xảy ra (ràng buộc mô tả) và có thể làm việc xung quanh nó bằng cách chuyển đổi thủ công _stat_func()
thành tĩnh sau khi sử dụng lần cuối, như vậy:
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
Vì vậy, câu hỏi của tôi là:
Có cách nào tốt hơn, như trong sạch hơn hay nhiều "Pythonic" hơn, để thực hiện điều này?
staticmethod
. Chúng thường hữu ích hơn như các hàm cấp mô-đun, trong trường hợp đó, vấn đề của bạn không phải là vấn đề.classmethod
, mặt khác ...