下面的代码片段在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:非绑定方法step()必须以CifsTest实例作为第一个参数进行调用(改为获取str实例)
尽管使用python 3,它运行得很好:
No
这是消息#注意这里'self‘是str
默认设置
这行为正确吗?
Python3允许从类方法调用实例方法吗?
发布于 2019-11-03 23:42:01
在Python3中,方法是常规函数对象(不是“未绑定方法”实例),因此它们不检查第一个参数是否是类的实例。
不知道为什么这个改变被认为是重要的(可能是一致性还是性能),但是您所观察到的似乎是这种选择的一个不必要的副作用。
https://stackoverflow.com/questions/58688908
复制