我什么时候应该更喜欢 @classmethod 而不是 @staticmethod,反之亦然?

时间:2021-04-29 05:03:36

标签: python static-methods class-method

注意:这个问题不是关于

  • “我如何使用 @classmethod@staticmethod?”或
  • @staticmethod@classmethod 之间有什么区别?”

在以下课程中,

  1. @classmethod@staticmethod 都可以访问类属性。
  2. 它们都不能访问实例属性。

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,反之亦然?

0 个答案:

没有答案