Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类方法中调用self参数内的变量_Python_Python 3.x_Oop - Fatal编程技术网

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中没有实例状态,这就是重点。您可以将实例作为另一个参数显式传递。。。看起来不雅观不,类方法中没有实例状态,这就是重点。您可以将实例作为另一个参数显式传递。。。但似乎不雅