【发布时间】:2022-01-06 11:55:16
【问题描述】:
来自the documentation of __init__
__init__() 不能返回非 None 值;这样做会导致在运行时引发 TypeError。
我从框架的可扩展基类中找到了这段代码。
它运行时没有运行时错误。
class Parent():
def __init__(self, x):
self.x = x
return self.x + 10
class Child(Parent):
def __init__(self, x):
y = super(Child, self).__init__(x)
print(y)
c = Child(5)
我对其进行了搜索,并同意将数据从 super().__init__ 传递到派生类,而不必通过实例中继它。
但是,为什么 python 允许 __init__ 返回值?
这是一种广为人知的模式吗?
【问题讨论】:
-
请链接您在其中找到您引用的信息的文档。
-
我认为是
type.__call__检测__init__何时返回值。在Child中,您自己调用__init__,而不关心它返回int。 -
@khelwood:我也这么认为,但至少it's written 的方式类似
-
docs.python.org/3/reference/datamodel.html#object.__init__ 有不同的措辞:“因为 __new__() 和 __init__() 在构造对象时一起工作(__new__() 来创建它,而 __init__() 来定制它),没有非__init__() 可能不会返回任何值;这样做会导致在运行时引发 TypeError。"
-
如果您尝试直接实例化
Parent,我认为您找到的代码会出错。