从 class 方法调用实例方法,在 python3 中允许,在 python 中不允许 2?
Calling instance method from class method, allowed in python3, disallowed in 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: unbound method step() must be called with CifsTest instance
as first argument (got str instance instead)
虽然使用 python 3 它运行良好:
No attr
This is the message # Note here the 'self' is the str
Default
这是正确的行为吗?
Python3 允许从 class 方法调用实例方法 ?
在 Python 中,3 个方法是常规函数对象(不是 "unbound method" 实例),因此它们不检查第一个参数是否是 class.[=10 的实例=]
不确定为什么认为此更改很重要(可能是均匀性或性能),但您观察到的情况看起来像是此选择的不良副作用。
以下代码片段在 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: unbound method step() must be called with CifsTest instance as first argument (got str instance instead)
虽然使用 python 3 它运行良好:
No attr
This is the message # Note here the 'self' is the str
Default
这是正确的行为吗?
Python3 允许从 class 方法调用实例方法 ?
在 Python 中,3 个方法是常规函数对象(不是 "unbound method" 实例),因此它们不检查第一个参数是否是 class.[=10 的实例=]
不确定为什么认为此更改很重要(可能是均匀性或性能),但您观察到的情况看起来像是此选择的不良副作用。