在python中创建子类以在客户机cod中解耦的正确方法

2024-06-02 05:21:16 发布

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

我有一些有趣的设计问题

我有一些抽象类,我们把它命名为ServiceClass

假设我有两个子类,分别命名为CoolServiceClassAmazingServiceClass,它们都继承自ServiceClass

class ServiceClass(ABC):
    @abstractmethod
    def do_something(self):
        pass


class CoolServiceClass(ServiceClass):
    def do_something(self):
        return 'Cool!'

    def do_nothing(self):
        return 'Nothing!'


class AmazingServiceClass(ServiceClass):
    def do_something(self):
        return 'Amazing!'

    def just_do_it(self):
        return 'Nope'

我想写客户机代码,但我不希望它耦合到客户机代码中的一个子类。我不希望客户机代码能够使用任何方法just_do_itdo_nothing,因此我能够轻松地在它们的实现之间进行替换。我知道python是duck类型的语言,但我仍然想知道处理这种情况的正确方法是什么

我想到的一个解决方案是使用某种代理类,它看起来像这样:

class ProxyServiceClass(ServiceClass):
    def __init__(self, service_class):
        self.service_class = service_class

    def do_something(self):
        return self.service_class.do_something()

然后客户端代码将如下所示:

service_class1 = ProxyServiceClass(CoolServiceClass())
service_class2 = ProxyServiceClass(AmazingServiceClass())

现在,如果我尝试使用任何方法just_do_itdo_nothing,我将得到一个异常

我对这个解决方案有点怀疑,因为我还没有看到类似的解决方案,我很乐意听取您的意见

谢谢


Tags: 方法代码self客户机returndefserviceit