【问题标题】:Can I access an instance-variable using a @classmethod?我可以使用@classmethod 访问实例变量吗?
【发布时间】:2021-04-29 04:47:10
【问题描述】:
class MyClass:
    __module_attr: str = "module text value"

    def __init__(self):
        self.__instance_attr: str = "instance text value"

    @classmethod
    def cls_modify(cls):
        cls.__module_attr = "class text value"

    @classmethod
    def cls_display(cls):
        print(cls.__module_attr)

假设,我想在cls_display() 中打印__instance_attr 的值。

我该怎么做?

【问题讨论】:

  • 如果你把它的声明放在__module_attr旁边会发生什么?

标签: python static-methods class-method


【解决方案1】:

没有。类方法没有提供对实例对象的引用,因此其数据不可用。 Python 为您生成实例和类方法的第一个参数。例如实例方法,它是对实例数据的引用。对于类方法,它是对类对象本身的引用。如果你不需要这些东西,静态方法不会得到任何特殊的第一个参数。

在所有三种情况下,调用看起来都是一样的。调用者不需要什么特别的东西来告诉你方法类型。调用者不必知道。这就是不同类型的重点。实施者根据需要的数据选择类型,但不必为此打扰用户。

【讨论】:

  • @user366312 静态方法不会传递任何实例。它们只是存储在类命名空间中的函数。您将无法访问类或实例属性
  • @user366312 不,因为那不是你的问题,我敢肯定已经有重复的问题
猜你喜欢
  • 2021-08-27
  • 2012-06-03
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多