Python类实例变量继承机制

时间:2016-04-21 15:14:42

标签: python oop inheritance

如果我运行此代码:

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()。

1 个答案:

答案 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")