从超类对象初始化子类实例

时间:2016-02-29 20:45:29

标签: python inheritance constructor

logging.Logger州的文档:

  

请注意,Logger永远不会直接实例化,但始终通过模块级函数logging.getLogger(name)

这引出了以下问题(我将转而使用Foo类代替logging.Logger,因为我想问一般的原则。

假设有一些类Foo,有几个属性和方法:

class Foo:
    def method_0(self..):
        ...

    def method_1(self..):
        ...

    def method_n(self..):
        ...

我想继承Foo,并且只专注于其中几种方法。

class SubFoo(Foo):
    def method_1(self, ...):
        ...
        # Or super - not the point of the question.
        Foo.method_1(self, ...)

    ...

问题是Foo没有可用的构造函数,只有通过Foo创建getFoo类型对象的方法。 Foo的“SubFoo”部分需要是“已批准”Foo对象,我不知道如何强制SubFoo Foo部分成为“认可”的对象。

注意

显然有几个变通办法来继承Foo,例如,合成,猴子修补,使用__dict__ / gettatr的聪明游戏,等等。尽管如此,这个问题是关于子类化的。

1 个答案:

答案 0 :(得分:0)

你误解了继承。要创建SubFoo的实例,您只需要像对待任何其他类一样实例化它:SubFoo()

Python没有构造函数,并且在任何情况下,未在子类上定义的方法都会自动继承超类版本而无需执行任何操作。