Python 在类方法中调用self参数内的变量
我想知道我们是否可以调用Python 在类方法中调用self参数内的变量,python,python-3.x,oop,Python,Python 3.x,Oop,我想知道我们是否可以调用selfin-class方法中启动的变量。例如: class ABC(): def method1(self): self.var1 = '123' @classmethod def callvar1(cls): '''print var1''' 我希望实现如下相同的输出: class ABC(): var1 = '123' def method1(self): se
self
in-class方法中启动的变量。例如:
class ABC():
def method1(self):
self.var1 = '123'
@classmethod
def callvar1(cls):
'''print var1'''
我希望实现如下相同的输出:
class ABC():
var1 = '123'
def method1(self):
self.var1 = '123'
@classmethod
def callvar1(cls):
print(cls.var1)
如何在
callvar1
中访问self.var1
?使用self关键字访问类的成员
class ABC():
var1 = '123'
def method1(self):
self.var1 = '123'
@classmethod
def callvar1(self):
print(self.var1)
使用self关键字访问类的成员
class ABC():
var1 = '123'
def method1(self):
self.var1 = '123'
@classmethod
def callvar1(self):
print(self.var1)
由于
callvar1
是一个类方法,因此它无权访问self
。这是因为该方法没有绑定到类的特定实例,而是绑定到类本身。因此,当您调用该方法时,它不知道您引用的是哪个实例。正如在代码的第二块中所做的那样,必须将要打印其var1
的对象传递给函数
您的另一个选择是不将其设置为类方法。由于
callvar1
是类方法,因此它无权访问self
。这是因为该方法没有绑定到类的特定实例,而是绑定到类本身。因此,当您调用该方法时,它不知道您引用的是哪个实例。正如在代码的第二块中所做的那样,必须将要打印其var1
的对象传递给函数
您的另一个选择是不将其作为类方法。类方法绑定到类本身,而不是它的特定实例,因此如果您试图访问类方法内部的
self.var1
(实例变量),您将不会有太多乐趣
您最好的选择是简单地使该方法不是类方法(取决于您的用例):
尽管另一个选项是将类的实例传递给类方法:
>>> class ABC():
... var1 = '123'
... def method1(self):
... self.var1 = '123'
... @classmethod
... def callvar1(cls, inst):
... print(inst.var1)
...
>>> b = ABC()
>>> ABC.callvar1(b)
123
类方法绑定到类本身,而不是它的特定实例,因此如果您试图访问类方法内部的
self.var1
(实例变量),您将不会有太多乐趣
您最好的选择是简单地使该方法不是类方法(取决于您的用例):
尽管另一个选项是将类的实例传递给类方法:
>>> class ABC():
... var1 = '123'
... def method1(self):
... self.var1 = '123'
... @classmethod
... def callvar1(cls, inst):
... print(inst.var1)
...
>>> b = ABC()
>>> ABC.callvar1(b)
123
不,classmethod中没有实例状态,这就是重点。您可以将实例作为另一个参数显式传递。。。看起来不雅观不,类方法中没有实例状态,这就是重点。您可以将实例作为另一个参数显式传递。。。但似乎不雅