让我介绍一下我的问题。我正在创建一组通常是食物的对象,但它们中的每一个都可能具有完全不同的属性集来设置。 我想使用 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/