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

以下代码段给出了python2错误,但python3没有错误

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:必须使用CifsTest实例调用未绑定方法step()   作为第一个参数(取而代之的是str实例)

使用python 3时,它运行良好:

  

没有属性

     

这是消息#注意,这里的“自我”是str

     

默认

这是正确的行为吗?

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

woshiriluobingcheng1 回答:从类方法调用实例方法,在python3中允许,在python 2中不允许?

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

不确定为什么认为此更改很重要(可能是均匀性或性能),但是您观察到的结果似乎是此选择的不良副作用。

本文链接:https://www.f2er.com/3168474.html

大家都在问