首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在类方法中调用自身参数内的变量

在类方法中调用自身参数内的变量
EN

Stack Overflow用户
提问于 2020-06-24 10:37:44
回答 3查看 48关注 0票数 0

我想知道我们是否可以在类方法中调用self中初始化的变量。例如:

代码语言:javascript
运行
复制
class ABC():
    def method1(self):
        self.var1 = '123'

    @classmethod
    def callvar1(cls):
        '''print var1'''

我想要实现相同的输出,如下所示:

代码语言:javascript
运行
复制
class ABC():

    var1 = '123'
    
    def method1(self):
        self.var1 = '123'

    @classmethod
    def callvar1(cls):
        print(cls.var1)

如何在callvar1中访问self.var1

EN

回答 3

Stack Overflow用户

发布于 2020-06-24 10:48:18

因为callvar1是一个类方法,所以它不能访问self。这是因为该方法并不绑定到类的特定实例,而是绑定到类本身。因此,当您调用该方法时,它不知道您引用的是哪个实例。正如您在代码的第二个块中所做的那样,您必须将要将其var1打印到函数的对象传递给函数。

您的另一种选择是不将其设置为类方法。

票数 1
EN

Stack Overflow用户

发布于 2020-06-24 10:49:33

类方法绑定到类本身,而不是类的特定实例,所以如果您试图访问类方法中的self.var1 (一个实例变量),您将不会有太多乐趣。

你最好的选择就是让这个方法不是一个类方法(取决于你的用例):

代码语言:javascript
运行
复制
>>> class ABC():
...     var1 = '123'
...     def method1(self):
...         self.var1 = '123'
...     def callvar1(self):
...         print(self.var1)
...
>>> b = ABC()
>>> b.callvar1()
123

尽管另一种选择是将类的实例传递给类方法:

代码语言:javascript
运行
复制
>>> class ABC():
...     var1 = '123'
...     def method1(self):
...         self.var1 = '123'
...     @classmethod
...     def callvar1(cls, inst):
...         print(inst.var1)
...
>>> b = ABC()
>>> ABC.callvar1(b)
123
票数 1
EN

Stack Overflow用户

发布于 2020-06-24 10:46:47

使用self关键字访问类的成员。

代码语言:javascript
运行
复制
class ABC():

    var1 = '123'
    
    def method1(self):
        self.var1 = '123'

    @classmethod
    def callvar1(self):
        print(self.var1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62546725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档