[英]How to refer to subclass property in abstract shared implementation in abstract class method
对于类:
class Base(ABC):
def __init__(self, param1):
self.param1 = param1
@abstractmethod
def some_method1(self):
pass
# @abstractmethod
# def potentially_shared_method(self):
# ????
class Child(Base):
def __init__(self, param2):
self.param1 = param1
self.param2 = param2
def some_method1(self):
self.object1 = some_lib.generate_object1(param1, param2)
def potentially_shared_method(self):
return object1.process()
我想移动potentially_shared_method
以在抽象 calss 中共享,但是它使用在some_method1
中初始化的object1
并且需要留在那里。
如果它只是潜在地共享,它不属于 base class。你会违反一些设计原则。
共享没有意义的孩子 class 应该做什么?
此外,您还引入了一些时间耦合; 您只能在调用some_method1
之后调用potentially_shared_method
。 这并不理想,因为您的 class 的用户可能没有意识到这一点。
此外,如果该方法是共享的,您可能不希望它在您的基础 class 中是抽象的; 使用抽象方法,您实际上只是在共享签名; 但您似乎想要共享功能。
反正。 这里有一些选项:
potentially_shared_method
移动到SharedMixin
class 中,并让那些共享它的孩子继承自Base
和SharedMixin
。 然后你也可以将some_method1
移动到那个SharedMixin
class 因为在我看来那些 go 在一起。 或者可能不是...object1
的访问隐藏在 getter 后面。 使 getter 在基类 class 中有一个虚拟实现,并在实际创建object1
的那些子类中有一个正确的实现。 然后可以将potentially_shared_method
移动到Base
并仅引用 getter。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.