这个问题涉及 Python 中的设计模式,是针对软件设计人员的。
我有几个类继承自同一个抽象类(它们都有相似的接口(interface),但成员函数有非常不同的实现)。我想创建一个结合(包装)所有这些的类(或其他东西)。我所说的组合是指根据输入参数创建并返回某个类的对象的模式。最简单的解决方案是 Python 函数:
def fabric_function(arg):
if isinstance(arg, float):
return Class1(arg)
if isinstance(arg, str):
return Class2(arg)
是否有更好的模式可以做到这一点?我真的更希望它是一个根据参数返回 Class1
或 Class2
对象的类。我希望用户创建一个类 Class
的实例,该实例根据输入参数作为 Class1
或 Class2
的实例运行,以便用户不必决定使用哪一个,并且在所有情况下 type(obj)
的输出都应该是 Class
。在这种情况下,我可以修改负责对象创建过程的成员函数 __new__ ,但我不确定这是一种干净的方法。也许我应该使用多重继承并在构造函数中决定真正继承哪个父类?
最佳答案
我认为 Class1
和 Class2
以某种方式相关(例如,“Square”和“Circle”都是“Figures”)。您所描述的是一个抽象工厂。
您需要一个公开 Create()
方法的类,接受最低限度的上下文,以帮助您找出要实例化的具体实现。
关于Python设计模式: class that returns different objects depending on parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65123937/