如何在方法中同时访问 cls 和 self

use*_*557 11 python

我想要有这样的代码

class myClass():

    def __init__(self):
        self.__var1 = 'var1'

    var2 = 'var2'

    def myNormalMethod(self):
        print self.__var1

    @classmethod
    def myClassMethod(cls):
       print cls.__var2

    #How do I do this?
    def myMethod():
        print self.__var1
        print cls.__var2
Run Code Online (Sandbox Code Playgroud)

现在最后一种方法不起作用,因为我不知道如何同时访问 self 和 cls。我该如何实施?

小智 9

作为一个非常简短的回顾,self指的是类的当前实例,而cls变量附加到类本身,即在每个实例之间共享。以下是一些有助于解决此问题的参考资料,以及我如何找到您的解决方案:

我修改了您的示例代码以说明差异并包含一个解决方案:

class MyClass:
    __var2 = 'var2'
    var3 = 'var3'

    def __init__(self):
        self.__var1 = 'var1'

    def normal_method(self):
        print self.__var1

    @classmethod
    def class_method(cls):
       print cls.__var2

    def my_method(self):
        print self.__var1
        print self.__var2
        print self.__class__.__var2


if __name__ == '__main__':
    print MyClass.__dict__['var3']

    clzz = MyClass()
    clzz.my_method()
Run Code Online (Sandbox Code Playgroud)

__var2var3是保存到类中的变量。您可以访问任何没有实例的类变量,通过__dict__它表示名称空间。

由于类变量成为每个实例的一部分,您只需调用self即可访问它们。或者,您可以显式调用self.__class__.__var2以明确预期变量的实际存储位置。


jas*_*per 6

您可以这样做self.__var2- 在实例上找不到的任何属性都将在类中自动查找。

要明确表示您希望属性来自类本身,请使用self.__class__.__var2.