如果我运行此代码:
class Super:
def __init__(self, name):
self.name = name
class Sub(Super):
def publ(self):
print("works")
a = Sub()
按计划,这条消息成功失败:
TypeError: __init__() takes exactly 2 arguments (1 given)
但它给我提问:
哪里存储了关于参数条目的Sub类要求的信息?我的意思是SUB()知道它需要" name"作为论点? 什么是定义它如何继承的机制"知识"来自Super()。
答案 0 :(得分:2)
Python教程has a section on inheritance。
如果在类中找不到请求的属性,则搜索继续查找基类。如果基类本身是从其他类派生的,则递归应用此规则。
调用Sub()
时会发生的情况是解释器在类对象中查找名为__init__
的属性。如果找到它将使用它。如果找不到它(在你的例子中是这种情况),它将搜索类的基类。在您的示例中,它找到从类__init__
继承的Super
方法。口译员将继续调用该方法。
您可以通过以下任一方式修复示例:
a = Sub('John Doe')
或:
class Sub(Super):
def __init__(self):
super(Sub, self).__init__("My Name Is Sub")
def publ(self):
print("works")