我有类 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
但这似乎是不可能的。要么我错过了使这项工作成功的方法,要么(更有可能)我错过了一个非常重要的原因,为什么它不能被允许工作。谁能解释一下是哪一个?
[当然,如果我使用组合而不是继承,这一切都很好办。但我希望通过 __getattr__
避免将所有 Base
方法委托(delegate)给 Derived
。]
最佳答案
取决于您的 Base
类使用 base_arg1
、base_arg2
做什么。
class Base(object):
def __init__(self, base_arg1, base_arg2):
self.base_arg1 = base_arg1
self.base_arg2 = base_arg2
...
class Derived(Base):
def __init__(self, base_arg1, base_arg2, derived_arg1, derived_arg2):
super().__init__(base_arg1, base_arg2)
...
@classmethod
def from_base(cls, b, da1, da2):
return cls(b.base_arg1, b.base_arg2, da1, da2)
关于python - 通过继承共享基础对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799499/