1

__init__クラスメソッドにたくさんのメソッドを動的に作成したいと思います。Haventはこれまで運が良かった。

コード:

class Clas(object):
    def __init__(self):
        for i in ['hello', 'world', 'app']:
            def method():
                print i
            setattr(self, i, method)

私よりも、リストに最も適したメソッドを作成してメソッドを呼び出します。

>> instance = Clas()

>> instance.hello()

'app'

印刷しhelloないと思いappます。何が問題ですか?さらに、これらの動的に割り当てられたメソッドのそれぞれは、たとえ私が行ったとしても、メモリ内の同じ関数を参照していましたcopy.copy(method)

4

1 に答える 1

6

i適切にバインドする必要があります:

for i in ['hello', 'world', 'app']:
    def method(i=i):
        print i
    setattr(self, i, method)

次に、i変数はローカルになりmethodます。別のオプションは、メソッドを生成する新しいスコープ(個別の関数)を使用することです。

def method_factory(i):
    def method():
        print i
    return method 

for i in ['hello', 'world', 'app']:
    setattr(self, i, method_factory(i))
于 2013-03-25T14:47:22.980 に答える