首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从类方法调用实例方法,在python3中是允许的,在python 2中是不允许的?

从类方法调用实例方法,在python3中是允许的,在python 2中是不允许的?
EN

Stack Overflow用户
提问于 2019-11-04 07:29:44
回答 1查看 281关注 0票数 2

下面的代码片段在python2中出现错误,但在python3中没有出现错误

代码语言:javascript
代码运行次数:0
运行
复制
class Steps(object):
    def step(self, msg="Default"):
        if not hasattr(self, "funky_attr"):
            print('No attr')
        print(self)
        print(msg)

class FirstTest(Steps):
    @classmethod
    def test_setup(cls):
      cls.step("This is the message")

if __name__ == '__main__':
    C = FirstTest()
    C.test_setup()

对于python 2,它会产生错误:

TypeError:非绑定方法step()必须以CifsTest实例作为第一个参数进行调用(改为获取str实例)

尽管使用python 3,它运行得很好:

No

这是消息#注意这里'self‘是str

默认设置

这行为正确吗?

Python3允许从类方法调用实例方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 07:42:01

在Python3中,方法是常规函数对象(不是“未绑定方法”实例),因此它们不检查第一个参数是否是类的实例。

不知道为什么这个改变被认为是重要的(可能是一致性还是性能),但是您所观察到的似乎是这种选择的一个不必要的副作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58688908

复制
相关文章

相似问题

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