【问题标题】:How can a method directly access its class variables?方法如何直接访问其类变量?
【发布时间】:2022-11-17 12:46:55
【问题描述】:

我最近从 Java 转向 Python 进行开发,仍然不习惯 Python 编程的一些隐含性。

我有一个定义了一些类变量的类,如何在 Python 的方法中访问类变量?

class Example:
    CONSTANT_A = "A"
    
    @staticmethod
    def mymethod():
        print(CONSTANT_A)    

上面的代码会给我错误消息:Pylance 的 "CONSTANT_A" is not defined"。

我知道我可以使用 self.CONSTANT_A 完成这项工作,但 self 指的是对象,而我试图直接访问类变量(特别是常量)。


问题

如何在 Python 中直接访问类变量而不是通过对象?

【问题讨论】:

标签: python class variables scope


【解决方案1】:

在 python 中,您无法从没有 self. 或 cls. 的方法访问父作用域(类)的字段。

考虑使用classmethod:

class Example:
    CONSTANT_A = "A"
    
    @classmethod
    def mymethod(cls):
        print(cls.CONSTANT_A)   

或者像Classname.attribute一样直接访问它:

class Example:
    CONSTANT_A = "A"
    
    @staticmethod
    def mymethod():
        print(Example.CONSTANT_A)   

【讨论】:

  • 小更正:类不是作用域。如果是的话,方法可以使用未绑定变量访问其字段,就像在 OP 的代码中一样。
  • 您还可以为实例方法添加 type(self).CONSTANT_A
【解决方案2】:

对于静态方法,您可以通过<class_name>.<variable>访问类变量。

>>> class Example:
...     CONSTANT_A = "A"
...     @staticmethod
...     def mymethod():
...         print(Example.CONSTANT_A) 
... 
>>> 
>>> x = Example.mymethod()
A # print value

【讨论】:

    猜你喜欢
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多