私の問題を紹介しましょう。私は一般的にFoodであるオブジェクトのセットを作成していますが、それぞれが設定する属性のセットが完全に異なる場合があります。ファクトリデザインパターンを使用しようと思ったところ、オブジェクトの属性をどこでどのように設定するかという問題に直面し、ビルダーパターンを見つけました。しかし、私は正しい道を進んでいるかどうかわかりません。例:
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
私の質問は、コンストラクターのパラメーターを渡したいのですが、その方法がわかりません。ここでビルダーパターンは良い考えですか?属性のリストはもっと長くなる可能性があります。また、属性名をキー、値を値としてコンテキストディクショナリを渡すかどうかも疑問でした。これを解決する方法はありますか?ヒントやコツを本当に感謝します。
よろしく
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
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加