2016-08-28 7 views
1

ファクトリメソッドを引数として持つ関数があります。ファクトリメソッドを呼び出すと、オブジェクトが作成されます。今では、希望のオブジェクト/クラスFruit.__init__のコンストラクタを直接ファクトリメソッドとして指定できると考えました。しかし、それは機能しません。self引数は "存在しません"。だから私は、オブジェクトを構築する追加の方法fruit_factoryを導入する必要があります。ファクトリメソッドとして__init__コンストラクタを使用

def fruit_factory(owner): 
    return Fruit(owner) 

class Fruit: 
    def __init__(self, owner): 
     print('Making a fruit for ' + owner) 

def make_snack_for_jim(snack_factory): 
    snack_factory('Jim') 

make_snack_for_jim(fruit_factory) # Works, but needs additional function 
make_snack_for_jim(Fruit.__init__) # Does not work (no 'self' argument) 

は直接追加メソッドを作成する必要の代わりにコンストラクタを指定する方法はありますか?

+2

を呼んで、私は本当に理解していません。果物をファクトリ関数にロードできないのはなぜですか? –

+0

Markus Meskanenの答えで提案されていますか?私はそれを行うことができるようだが、私はそれを考えなかった... ;-) – Michael

答えて

4

ただ、クラス自体に渡す:

>>> make_snack_for_jim(Fruit) 
Making a fruit for Jim 

これはmake_snack_for_jimの内側にあなたのsnack_factoryFruitにを設定し、あなたがしてsnack_factory('Jim')

関連する問題