python - 具有许多参数的对象的工厂方法

标签 python oop design-patterns

让我介绍一下我的问题。我正在创建一组通常是食物的对象,但它们中的每一个都可能具有完全不同的属性集来设置。 我想使用 Factory 设计模式,然后我遇到了一个问题,在哪里以及如何设置对象属性,然后我发现了一些 Builder 模式。但是我不确定我是否走在正确的道路上。 示例:

class Food(object):
    def __init__(self, taste = None):
        self._taste = taste
class Bread(Food):
   def __init__(self, flour_type = None):
       Food.__init__(self, taste = 'good')
       self._flour = flour_type
class Meat(Food):
   def __init__(self, type = None, energy_value = None, taste = None):
       Food.__init__(self, taste = taste)
       self._type = type
       self._energy = energy_value
class Soup(Food):
   def __init__(self, name = None, recipe = None):
       Food.__init__(self, taste = 'fine')
       self._name = name
       self._recipe = recipe

然后我有一个这样的工厂:

FOOD_TYPES = {'food':Food, 'bread':Bread, 'meat':Meat, 'soup':Soup}

class FoodFactory(object):
    @staticmethod
    def create_food(food_type):
        try:
            return FOOD_TYPES[food_type.lower()]()
        except Exception:
            return None

我的问题是:我想为构造函数传递参数,但不知道如何传递。 Builder 模式是否是个好主意?属性列表可能会更长。我还想知道是否传递一个上下文字典,属性名称作为键,值作为值。 任何想法如何解决这个问题?非常感谢任何提示和提示。

问候

最佳答案

只需像这样编辑您的FoodFactory:

class FoodFactory(object):
    @staticmethod
    def create_food(food_type, **kwargs):
        try:
            return FOOD_TYPES[food_type.lower()](**kwargs)
        except Exception:
            return None

现在您可以为每个 Food 类使用关键字参数:

>>> meat = FoodFactory.create_food("meat", energy_value=25)
>>> print meat
>>> print meat._energy

将打印出如下内容:

>>> <__main__.Meat object at 0x03122AB0>
>>> 25

希望这对您有所帮助!

关于python - 具有许多参数的对象的工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916604/

相关文章:

java - 在 Java 中实现观察者模式时避免暴露实现细节?

android - 避免用于更新 UI 的静态方法(可能在 Util 类中)的合适方法

python - 是否有任何 Python 环境支持编辑并继续?

python - 为什么我在不同机器上的 python 中得到不同的时间戳

python - 性能:Python 3.x 与 Python 2.x

python - Tensorflow 自定义过滤层定义,如 glcm 或 gabor

javascript - 在 Backbone 中访问父类

java - 锁定对象的方法 (Java)

python - Python 中 OOP 的混淆

c++ - 指针引用模式 - 常用?