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

2024-09-28 01:27:52 发布

您现在位置: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

现在,最后一个方法不起作用,因为我不知道如何访问self和cls。如何实现这一点?在


Tags: 代码selfinitdefmyclass事情doclass
2条回答

作为对非常的简要回顾,self是指类的当前实例,而cls变量附加到类itelf,即在每个实例之间共享。这里有一些参考资料可以帮助解决这个问题,以及我是如何得到你的解决方案的:

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

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()

__var2和{}是保存到类中的变量。您可以通过代表名称空间的__dict__来访问没有实例的任何类变量。在

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

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

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

相关问题 更多 >

    热门问题