考虑这个简单的代码:
代码A:
class Test:
pass
t = Test()
t.__str__() # 1
t.non_existing_method() # 2
代码B:
class Test(object):
pass
t = Test()
t.__str__() # 1
t.non_existing_method() # 2
为什么在codeA中 CPython 不抱怨不存在的_ str _方法(当它抱怨 #2 时)?它既不是静态方法也不是类方法。它也不像在codeB中那样从父对象继承。这正如我在 IronPython 中所期望的那样工作(它与 codeA 中的str有关)。
在codeB 中,CPython 的行为与我预期的一样——在 #1 的情况下不会抱怨,因为_ str _现在被继承了。
更新:
代码输出(CPython):
Traceback (most recent call last):
File "C:\eclipse_workspace\py_test\src\test_module.py", line 6, in <module>
t.non_existing_method() # 2
AttributeError: 'Test' object has no attribute 'non_existing_method'