簡體   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