注意:这个问题不是关于
@classmethod
和 @staticmethod
?”或@staticmethod
和 @classmethod
之间有什么区别?”在以下课程中,
@classmethod
和 @staticmethod
都可以访问类属性。MyClass1.py
class MyClass1:
__module_attr: str = "initial text value"
def __init__(self):
self.__instance_attr: str = "instance text value"
@classmethod
def cls_modify(cls):
cls.__module_attr = "class text value"
@staticmethod
def stat_display():
print(MyClass1.__module_attr)
if __name__ == '__main__':
my_obj = MyClass1()
my_obj.stat_display()
my_obj.cls_modify()
my_obj.stat_display()
MyClass2.py
class MyClass2:
module_attr: str = "initial text value"
def __init__(self):
self.__instance_attr: str = "instance text value"
@classmethod
def cls_modify(cls):
cls.module_attr = "class text value"
@staticmethod
def stat_display():
print(MyClass2.module_attr)
if __name__ == '__main__':
my_obj = MyClass2()
my_obj.stat_display()
my_obj.cls_modify()
my_obj.stat_display()
print(my_obj.module_attr)
print(MyClass2.module_attr)
所以,我看不出一种类型比另一种有什么优势。
我什么时候应该更喜欢 @classmethod
而不是 @staticmethod
,反之亦然?