簡體   English   中英

在Python中的構造函數外部初始化繼承的類

[英]Initialize inherited class outside constructor in Python

我有這樣的事情:

from some_module import SomeClass


class BaseClass:
    ...


class AnotherClass(BaseClass, SomeClass):
    def __init__(self, parameter, **kwargs):
        BaseClass.__init__(**kwargs)
        self.parameter

    def some_abstract_method(self, **kwargs):
        # this is an abstract method declared in BaseClass
        # and the arguments **kwargs must be passed here 
        # to respect the interface
        SomeClass.__init__(self.parameter, **kwargs)
        SomeClass.do_something()
        return self

我這樣做的原因是要尊重BaseClass的接口。 我想知道像這樣構造對象AnotherClass有多糟糕,以及是否有更好的方法來實現我想做的事情。 我唯一想到的另一種方法是執行以下操作:

class AnotherClass(BaseClass):
    def __init__(self, parameter, **kwargs):
        super().__init__(**kwargs)
        self.parameter

    def some_abstract_method(self, **kwargs):
        self.model = SomeClass(self.parameter, **kwargs)
        self.model.do_something()
        return self.model

但我不喜歡它,因為AnotherClass本質上是同一對象具有SomeClass 基本上,我不知道最佳實踐是什么。

如果可以的話,我總是更喜歡組合而不是繼承。 原因多種多樣,但讓我們嘗試列舉一些原因:

  • 周圍物體的狀態更少。
  • 不違反單一關注范式。
  • 不冒無意間發生名稱沖突的風險。
  • 更容易測試。
  • 松耦合。

因此,如果可以的話,我會提出您的第二個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM