在以下示例代码中,我希望每个
为了实现这一点,我已经将
这种方法是否存在潜在问题?或者有其他更适合处理嵌套抽象的设计模式吗?
car
对象都由存储为汽车属性的brake_system
和engine_system
对象组成。为了实现这一点,我已经将
Car
、BreakSystem
和EngineSystem
定义为抽象类。每个Car
子类都需要将其相应的BreakSystem
和EngineSystem
子类定义为类属性。这种方法是否存在潜在问题?或者有其他更适合处理嵌套抽象的设计模式吗?
from abc import ABC, abstractmethod
class Car(ABC):
"""
every car object should have an Engine object and a BrakeSystem object
"""
def __init__(self):
self.engine_system = self._engine_type()
self.brake_system = self._brake_type()
@property
@abstractmethod
def _engine_type(self):
raise NotImplementedError()
@property
@abstractmethod
def _brake_type(self):
raise NotImplementedError()
class EngineSystem(ABC):
pass
class BrakeSystem(ABC):
pass
class FooBrakeSystem(BrakeSystem):
pass
class FooEngineSystem(EngineSystem):
pass
class FooCar(Car):
_engine_type = FooEngineSystem
_brake_type = FooBrakeSystem
if __name__ == '__main__':
obj = FooCar()
car
类通过其子类进行初始化,因此我们将其设置为ABC。虽然我没有编写公共API,但我经常使用ABC来组织相关类的层次结构。 - donghyun208collections.abc
模块以获取 Python 容器行为的定义。一个Mapping
类的内部实现可能并不重要,只要它实现了 ABC 的抽象方法,其他代码就可以依赖它具有所有正确的方法。 - Martijn Pieters