【发布时间】:2018-05-15 10:44:03
【问题描述】:
当我运行这段代码时,我得到一个错误“AttributeError: 'NoneType' object has no attribute 'test'”
class BaseClass:
def __new__(self, number):
self.test = 1
class InheritedClass(BaseClass):
pass
instance = InheritedClass(1)
print(instance.test)
有人可以向我解释一下到底从基础继承了什么吗? Python 2 和 3 之间似乎存在差异,因为如果我将“test”放在 Baseclass 的属性字段中,我可以在 Python 2 中访问它,但不能在 3 中访问它。
【问题讨论】:
-
我认为重复的答案中没有讨论过这个问题。 Python 2 和 3 之间的行为差异在于
__new__()仅存在于新式类,即那些显式继承自object的类。在您的代码中,__new__()在 Python 2 中甚至没有被调用。在 Python 3 中它被调用,但没有实例,因为__new__()返回None-__new__()应该返回实例。副本中的答案更详细地解决了后一点。
标签: python python-3.x inheritance class-visibility