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

问题描述

注意:这个问题不是关于

  • “我如何使用 @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,反之亦然?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)