Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 工厂设计模式的实现?_Python_Factory_Factory Pattern - Fatal编程技术网

Python 工厂设计模式的实现?

Python 工厂设计模式的实现?,python,factory,factory-pattern,Python,Factory,Factory Pattern,我一直在研究用python实现工厂方法设计模式&我得到的大多数示例都是这种形式的 class Cup: color = "" # This is the factory method @staticmethod def getCup(cupColor): if (cupColor == "red"): return RedCup() elif (cupColor == "blue"):

我一直在研究用python实现工厂方法设计模式&我得到的大多数示例都是这种形式的

class Cup:
    color = ""

    # This is the factory method
    @staticmethod
    def getCup(cupColor):
        if (cupColor == "red"):
            return RedCup()
        elif (cupColor == "blue"):
            return BlueCup()
        else:
            return None

class RedCup(Cup):
    color = "red"

class BlueCup(Cup):
    color = "blue"

# A little testing
redCup = Cup.getCup("red")
print "%s(%s)" % (redCup.color, redCup.__class__.__name__)

blueCup = Cup.getCup("blue")
print "%s(%s)" % (blueCup.color, blueCup.__class__.__name__)
为什么对工厂功能使用
class

难道不是这样吗:

def CupFactory(cupColor):
    if (cupColor == "red"):
        return RedCup()
    elif (cupColor == "blue"):
        return BlueCup()
    else:
        return None
或者,在特定情况下,首选/需要基于类的方法

注意:互联网上使用类的示例


.

@Aran Fey,您链接的问题似乎相似,但事实并非如此。建议的解决方案是通过使用
@classmethod
使用替代构造函数,这是创建工厂的一种方法,但我有一个完全不同的问题,
为什么要将类用于工厂?
,在这种情况下,使用
altrnate构造函数/@staticmethod
是不合适的,我猜你是说
Cup
类的唯一目的是保存工厂方法?是的,这就是我所困惑的,因为大多数示例都显示了类似的东西(我甚至在问题中提到了一个链接)。根据我的说法,在这里使用一个类是一种过分的杀伤力,一个简单的函数就足够了。但是在任何情况下,我可能需要一个类来创建工厂吗?好的,我已经重新打开了这个问题。考虑到
camelCase
方法名称,我怀疑你有一个非常常见的情况,就是有人用Python编写Java。。。。但更严重的是,这些可能只是简单的例子。类工厂对象可能需要更复杂的方法。