如果我运行这个代码:
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()如何知道它需要“名称”作为论据?是什么机制定义了它是如何从Super()继承“知识”的。
发布于 2016-04-21 15:20:15
Python教程有一个关于继承的章节。
如果未在类中找到请求的属性,则搜索将继续在基类中查找。如果基类本身是从其他类派生的,则递归应用此规则。
调用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")
https://stackoverflow.com/questions/36773791
复制相似问题