gpt4 book ai didi

python-3.x - Python 设计模式 : Nested Abstract Classes

转载 作者:行者123 更新时间:2023-12-04 18:56:16 24 4
gpt4 key购买 nike

在下面的示例代码中,我想要每个 car要组成的对象 brake_systemengine_system对象,它们作为属性存储在汽车上。

为了实现这一点,我定义了 Car , BreakSystemEngineSystem作为抽象类。 Car的每个子类需要定义其各自的 BreakSystemEngineSystem子类作为类属性。

这种方法有什么潜在的问题吗?或者还有其他更适合处理嵌套抽象的设计模式吗?

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()

最佳答案

I want every car object to be composed of brake_system and engine_system objects



你有系统的抽象类
class EngineSystem(ABC):
pass

class BrakeSystem(ABC):
pass

一辆汽车必须由两个系统组成:
class Car:

def __init__(self, engine: EngineSystem, brake: BrakeSystem):
self._engine_system = engine
self._brake_system = brake

@property
def engine_type(self) -> EngineSystem:
return self._engine_system

@property
def brake_type(self) -> BrakeSystem:
return self._engine_system

现在,如果您需要创建特定的汽车
tesla = Car(ElectroEngine(), Disks())

# or even
class Tesla(Car):
def __init__(self):
super().__init__(ElectroEngine(), Disks())

tesla = Tesla()

这种方法允许您创建一个 car作为其系统的组合。

关于python-3.x - Python 设计模式 : Nested Abstract Classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52377718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com