我有Base
類。我想擴展它的功能Derived
。我正打算寫:與繼承共享基礎對象
class Derived(Base):
def __init__(self, base_arg1, base_arg2, derived_arg1, derived_arg2):
super().__init__(base_arg1, base_arg2)
# ...
def derived_method1(self):
# ...
有時候,我已經有一個Base
實例,我想創建一個基於它Derived
實例,即Derived
實例共享Base
對象(不重新創建它從頭開始)。我想我可以寫一個靜態方法來做到這一點:
b = Base(arg1, arg2) # very large object, expensive to create or copy
d = Derived.from_base(b, derived_arg1, derived_arg2) # reuses existing b object
但似乎不可能。要麼我錯過了一個方法來完成這項工作,或者(更可能)我錯過了一個很大的原因,爲什麼它不能被允許工作。有人可以解釋它是哪一個?
[當然,如果我使用了組合而不是繼承,這將很容易做到。但我希望避免一切Base
方法Derived
代表團通過__getattr__
]
- 這是沒有意義的。實例化Derived類時沒有Base實例。只有一個Derived對象,所以沒有什麼可以共享或重新創建。我認爲你不應該繼承Base。 –
另外,由於Base和Derived對'__init__'有不同的參數,所以一般情況下應避免使用'super()'。 –
@LennartRegebro:關於你的第一條評論,我試圖分享的'Base'實例是'b'。它是在我試圖創建一個Derived實例之前創建的。 – max