多くのパラメータを持つオブジェクトのファクトリメソッド

ジャノ

私の問題を紹介しましょう。私は一般的に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

私の質問は、コンストラクターのパラメーターを渡したいのですが、その方法がわかりません。ここでビルダーパターンは良い考えですか?属性のリストはもっと長くなる可能性があります。また、属性名をキー、値を値としてコンテキストディクショナリを渡すかどうかも疑問でした。これを解決する方法はありますか?ヒントやコツを本当に感謝します。

よろしく

linusg

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]

編集
0

コメントを追加

0

関連記事

分類Dev

保護されたコンストラクターとファクトリメソッドを持つオブジェクトのリストの自動修正

分類Dev

ジェネリックパラメーターを持つJavaメソッド-メソッド引数のサブクラスであるジェネリックパラメーターを持つオブジェクトを渡せないのはなぜですか?

分類Dev

AngularのorderByフィルターとメソッドのみを持つオブジェクトの配列

分類Dev

パラメータを持つメソッドを呼び出す方法(オブジェクト送信者、EventArgs e)

分類Dev

必要なすべてのパラメーターを構成する1つのリクエストオブジェクトをメソッドシグネチャパラメーターとして持つ

分類Dev

異なるメソッドとプロパティを持つ1つのインターフェイスからの異なるオブジェクト

分類Dev

オブジェクトパラメータに基づくモックメソッドの戻り値

分類Dev

特定のパラメータを持つオブジェクトを返すファクトリを作成するにはどうすればよいですか?

分類Dev

ファクトリメソッドによるJavaオブジェクトの構築:属性とコンストラクター(メソッド経由)

分類Dev

春の実装Beanは、インターフェースよりも多くのパブリックメソッドを持つことができますか?

分類Dev

パラメータ付きのAngularを持つオブジェクトのコンソールログ値

分類Dev

戻り値の型のジェネリックスを持つメソッドオブジェクト?

分類Dev

特定のメソッドを持つ任意のオブジェクトへのC ++ /(Qt)ポインター

分類Dev

InversifyJSのパラメーターを持つファクトリ

分類Dev

1セッターメソッドを持つ抽象クラスがあります-パラメーターはオブジェクトです。それを拡張するクラスの型をとるジェネリック<T>パラメータが欲しい

分類Dev

setHeaderのメソッドにオブジェクトパラメータを渡します-ラクダ

分類Dev

異なるタイプのジェネリックパラメーターを持つメソッドを持つジェネリッククラス

分類Dev

関数パラメーターを持つオブジェクトのインデックス署名

分類Dev

パラメータ付きのメソッドを使用してオブジェクトフォームリストを削除します

分類Dev

Javaパラメータとしてのジェネリックメソッドとメソッドオブジェクトの違いは何ですか?

分類Dev

IntelliJにオブジェクト全体を挿入するためのメソッド/コンストラクターパラメーターのリファクタリング

分類Dev

ジェネリックオブジェクトをパラメーターとして持つ関数

分類Dev

Scalaマクロを使用してジェネリック型パラメーターを持つオブジェクトの関数を呼び出す方法は?

分類Dev

複数のオプションのパラメーターを持つJavaでジェネリックメソッドを持つことが可能です。

分類Dev

Angularのgetメソッドのパラメーターとしてオブジェクトを使用する

分類Dev

メソッドパラメータでオブジェクトのプロトコルを指定します

分類Dev

特定のファクトリメソッドパラメータ値からクラスのジェネリック型を派生させる

分類Dev

同じジェネリックパラメーターを持つオーバーロードメソッド?

分類Dev

WriteメソッドのパラメーターとしてViewオブジェクトを渡す

Related 関連記事

  1. 1

    保護されたコンストラクターとファクトリメソッドを持つオブジェクトのリストの自動修正

  2. 2

    ジェネリックパラメーターを持つJavaメソッド-メソッド引数のサブクラスであるジェネリックパラメーターを持つオブジェクトを渡せないのはなぜですか?

  3. 3

    AngularのorderByフィルターとメソッドのみを持つオブジェクトの配列

  4. 4

    パラメータを持つメソッドを呼び出す方法(オブジェクト送信者、EventArgs e)

  5. 5

    必要なすべてのパラメーターを構成する1つのリクエストオブジェクトをメソッドシグネチャパラメーターとして持つ

  6. 6

    異なるメソッドとプロパティを持つ1つのインターフェイスからの異なるオブジェクト

  7. 7

    オブジェクトパラメータに基づくモックメソッドの戻り値

  8. 8

    特定のパラメータを持つオブジェクトを返すファクトリを作成するにはどうすればよいですか?

  9. 9

    ファクトリメソッドによるJavaオブジェクトの構築:属性とコンストラクター(メソッド経由)

  10. 10

    春の実装Beanは、インターフェースよりも多くのパブリックメソッドを持つことができますか?

  11. 11

    パラメータ付きのAngularを持つオブジェクトのコンソールログ値

  12. 12

    戻り値の型のジェネリックスを持つメソッドオブジェクト?

  13. 13

    特定のメソッドを持つ任意のオブジェクトへのC ++ /(Qt)ポインター

  14. 14

    InversifyJSのパラメーターを持つファクトリ

  15. 15

    1セッターメソッドを持つ抽象クラスがあります-パラメーターはオブジェクトです。それを拡張するクラスの型をとるジェネリック<T>パラメータが欲しい

  16. 16

    setHeaderのメソッドにオブジェクトパラメータを渡します-ラクダ

  17. 17

    異なるタイプのジェネリックパラメーターを持つメソッドを持つジェネリッククラス

  18. 18

    関数パラメーターを持つオブジェクトのインデックス署名

  19. 19

    パラメータ付きのメソッドを使用してオブジェクトフォームリストを削除します

  20. 20

    Javaパラメータとしてのジェネリックメソッドとメソッドオブジェクトの違いは何ですか?

  21. 21

    IntelliJにオブジェクト全体を挿入するためのメソッド/コンストラクターパラメーターのリファクタリング

  22. 22

    ジェネリックオブジェクトをパラメーターとして持つ関数

  23. 23

    Scalaマクロを使用してジェネリック型パラメーターを持つオブジェクトの関数を呼び出す方法は?

  24. 24

    複数のオプションのパラメーターを持つJavaでジェネリックメソッドを持つことが可能です。

  25. 25

    Angularのgetメソッドのパラメーターとしてオブジェクトを使用する

  26. 26

    メソッドパラメータでオブジェクトのプロトコルを指定します

  27. 27

    特定のファクトリメソッドパラメータ値からクラスのジェネリック型を派生させる

  28. 28

    同じジェネリックパラメーターを持つオーバーロードメソッド?

  29. 29

    WriteメソッドのパラメーターとしてViewオブジェクトを渡す

ホットタグ

アーカイブ