如何在python中创建一个继承自另一个类的类的构造函数?

时间:2015-03-06 14:14:28

标签: python python-2.7

我是Python语言的新手,我对继承有疑问。

假设这是我的代码:

class LogicGate(object):
    def __init__(self, n):
        self.label = n
        self.output = None

    def get_label(self):
        return self.label

    def get_output(self):
        self.output = self.perform_gate_logic()
        return self.output

class BinaryGate(LogicGate):
    def __init__(self, n):
        LogicGate.__init__(self, n)

        self.pinA = None
        self.pinB = None

这就是我如何看待python对象系统的实现。对象只是一堆变量,方法生活在其他地方。为了让方法对特定的对象做一些工作,我通过了自己的方法。在每种方法中。 (如果这完全不正确,请纠正我)

但是,我不明白这一点:

LogicGate.__init__(self, n)
你可以解释一下这里会发生什么吗?我使用的是python 2.7

1 个答案:

答案 0 :(得分:2)

所有python方法实际上都是“只是函数”。甚至像__init__这样的特殊方法实际上只是一个普通函数,它接受两个参数 - self(实际上可以有任何名称 - self只是一个约定)和{{1} }。

创建实例时,python会创建实例并将其n自动传递给self方法。因此,例如,您可以手动创建__init__实例:

LogicGate

如果要从父类进行初始化,则必须调用其>>> x = object.__new__(LogicGate) >>> x <__main__.LogicGate object at 0x7f12b2ea49d0> # This won't work, because x instance is not initialized >>> x.label Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'LogicGate' object has no attribute 'label' >>> LogicGate.__init__(x, 'foo') >>> x.label 'foo' - 这是__init__实际执行的内容。它只是调用LogicGate.__init__(self, n)类的__init__方法,并将您的实例作为第一个参数。

编辑:您应该使用方法解析顺序,而不是直接调用父级LogicGate,即:

__init__

这只是确保它会调用prober父类,所以如果你将它改为super(BinaryGate, self).__init__(n) ,你也不必将调用更改为父SuperLogicGate

您可能还应该阅读:https://docs.python.org/2/tutorial/classes.html?highlight=class%20inheritance