Python设计模式: class that returns different objects depending on parameters

标签 python oop design-patterns abstract-class multiple-inheritance

这个问题涉及 Python 中的设计模式,是针对软件设计人员的。

我有几个类继承自同一个抽象类(它们都有相似的接口(interface),但成员函数有非常不同的实现)。我想创建一个结合(包装)所有这些的类(或其他东西)。我所说的组合是指根据输入参数创建并返回某个类的对象的模式。最简单的解决方案是 Python 函数:

def fabric_function(arg):
    if isinstance(arg, float):
        return Class1(arg)
    if isinstance(arg, str):
        return Class2(arg)

是否有更好的模式可以做到这一点?我真的更希望它是一个根据参数返回 Class1Class2 对象的类。我希望用户创建一个类 Class 的实例,该实例根据输入参数作为 Class1Class2 的实例运行,以便用户不必决定使用哪一个,并且在所有情况下 type(obj) 的输出都应该是 Class。在这种情况下,我可以修改负责对象创建过程的成员函数 __new__ ,但我不确定这是一种干净的方法。也许我应该使用多重继承并在构造函数中决定真正继承哪个父类?

最佳答案

我认为 Class1Class2 以某种方式相关(例如,“Square”和“Circle”都是“Figures”)。您所描述的是一个抽象工厂。

您需要一个公开 Create() 方法的类,接受最低限度的上下文,以帮助您找出要实例化的具体实现。

关于Python设计模式: class that returns different objects depending on parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65123937/

相关文章:

python - Python中精确的信号延迟计算

asp.net - 拆分 ASP.NET MVC Controller

c++ - 初始化每个接受不同参数的算法的设计模式

python - 将特定 URL 的正文响应保存到文件并使用 mitmproxy 对其进行解码

python - Pandas 数据框类型 datetime64[ns] 在 Hive/Athena 中不起作用

python - Pygame 类型错误 : __init__ takes exactly 4 arguments (1 given)

java - 抽象类以摆脱 Activity 中的冗余代码

c# - 一个事务中的多个聚合/存储库

java - 为什么 shortValue() 方法是具体的,而 intValue() 是抽象到 java.lang.Number 中的?

java - 避免观察者模式中的并发修改