我想要有这样的代码
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)
__var2和var3是保存到类中的变量。您可以访问任何没有实例的类变量,通过__dict__它表示名称空间。
由于类变量成为每个实例的一部分,您只需调用self即可访问它们。或者,您可以显式调用self.__class__.__var2以明确预期变量的实际存储位置。