跨模块继承的设计模式

2024-05-16 09:49:51 发布

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

我有一个BaseClass对象,它继承了两个ChildClass对象。其中每一项都是重要的代码位(>;1000行),它们各自有自己的模块。 因此,结构如下:

带基类的模块1

from abc import ABCMeta

class BaseClass(metaclass=ABCMeta):

模块2和子类1

from module1 import BaseClass

class ChildClass1(BaseClass):

模块3和子类2

from module1 import BaseClass

class ChildClass2(BaseClass):

目前,我正在使用(我认为)工厂设计模式,其中我在一个单独的模块中有一个函数,控制调用哪个ChildClass:

带类控制器的模块4

from module2 import ChildClass1
from module3 import ChildClass2

def controller():
    if condition:
        return ChildClass1()
    else:
        return ChildClass2()

我不能把这个函数放在模块1中,因为我将以循环导入结束,所以目前它位于自己的模块中

以前版本的代码将控制器作为模块1中的staticmethodBaseClassimport ChildClass语句,在staticmethod中,但我不喜欢这种模式,所以我将其更改为当前结构

我的问题是-有没有更好的设计模式,我可以使用,而不必把所有的东西都放在同一个模块


Tags: 模块对象代码fromimport设计模式子类结构
1条回答
网友
1楼 · 发布于 2024-05-16 09:49:51

为了解决这个问题,我决定将类控制器设置为自己的类,因此模块4的外观如下所示:

from module2 import ChildClass1
from module3 import ChildClass2

class Controller:

    def __init__(self, *args):
        if condition:
            self.strategy = ChildClass1()
        else:
            self.strategy = ChildClass2()

然后我只需要初始化控制器并调用strategy对象上的方法。 我相信这是Strategy design pattern的一个例子

相关问题 更多 >