繁体   English   中英

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

[英]Initializing a Subclass Instance from a Superclass Object

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没有可用的构造函数,而只有通过getFoo来创建Foo类型的对象的getFoo SubFoo的“ Foo ”部分需要是“批准的” Foo对象,并且我不知道如何强制将SubFooFoo部件设置为“批准的”对象。

注意

显然,有几种解决方法可以将Foo子类化,例如,构图,猴子补丁,使用__dict__ / gettatr聪明游戏等。尽管如此,这个问题还是关于子类化的。

您对继承有误解。 要创建SubFoo的实例,只需像实例任何其他类一样将其实例化即可: SubFoo()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM