如何用python实现这个解决方案(策略设计模式)?我有一些粗略的h代码

2024-06-01 19:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用策略设计模式在python中实现这个解决方案。我对OOP完全陌生,目前正在和我的教授一起研究这个问题。在

基本上,问题是要有一个抽象类(或者更确切地说是一个接口)和两个具体的子类(car和bus),它们的方法是“find()”,返回乘坐交通工具的成本。在它们返回各自的成本后,抽象父类将选择更便宜的交通工具并输出打印语句“I choose bus”。在

这是粗略的代码。感谢能帮助我的人!我相信我的代码在某个地方错了。在

from abc import ABCMeta, abstractmethod

class transporter(metaclass=ABCMeta):
    'abstract parent class'
        @abstractmethod
        def find(self, cost):
            pass

    class car(transporter):
        def find(self):
            return "Cost of car travel is 50"

        def cost(self):
            return C = 50


    class bus(transporter):
        def find(self):
            return"Cost of bus travel is 20"

        def cost(self):
            return B = 20



    if __name__ == "__main__" :


        find_car = car()
        find_bus = bus()

        find_car.cost().execute()
        find_bus.cost().execute()

Tags: of代码selfreturndeffindcarclass
1条回答
网友
1楼 · 发布于 2024-06-01 19:29:09

我不是设计模式专家,但我认为这更接近您的需要:

from abc import ABCMeta, abstractmethod
from operator import methodcaller

class Transportation(object):
    def __init__(self):
        # instantiate concrete transporter with lowest cost
        self.transporter = min((Car, Bus), key=methodcaller('cost'))()

    def go_for_ride(self):
        self.transporter.travel()

class Transporter(metaclass=ABCMeta):
    @abstractmethod
    def cost(self):
        pass

    @abstractmethod
    def travel(self):
        pass

class Car(Transporter):
    @classmethod
    def cost(cls):
        return 50

    def travel(self):
        print('riding in a car')

class Bus(Transporter):
    @classmethod
    def cost(cls):
        return 20

    def travel(self):
        print('riding in a bus')

if __name__ == "__main__" :
    transportation = Transportation()
    transportation.go_for_ride()  # -> riding in a bus

相关问题 更多 >