2

Pythonで私ができること:

exec(code_string, globals(), some_object.__dict__)

メソッドをオブジェクトに追加します。ある種の同様の方法でクラスに静的メソッドを追加することは可能ですか? お気に入り:

exec(code_string, globals(), ClassName.__dict__)

次に、メソッドを静的に呼び出すことができるようにします。

ClassName.some_static_method()

私がやろうとしているのは、メソッドを定義するいくつかの python コードを指定して、実行時に新しい staticmethods を追加することです。つまり、私が与えられた場合:

code_string = '''
@staticmethod
def test():
    return 'blah'
'''

これを作成してクラスにインスタンス化して、呼び出すことができるようにするにはどうすればよいですか?

うまくいけば、私は十分に明確でした、ありがとう!

編集: オブジェクトに関数を追加する実際の例:

class TestObject(object):
    pass

code_string = '''
def test():
return 'blah'
'''
t = TestObject()
exec(code_string, globals(), t.__dict__)
4

1 に答える 1

2

setattr()を使用する

>>> code_string = '''
... @staticmethod
... def test():
...     return 'returning blah'
... '''
>>>
>>> exec(code_string)

>>> test
<staticmethod object at 0x10fd25c58>

>>> class ClassName(object):
...     def instancemethod(self):
...             print "instancemethod!"
...
>>> setattr(ClassName, 'teststaticmethod', test)

>>> ClassName.teststaticmethod()
'returning blah'
>>>

Python で exec() と eval() を安全に使用する方法については、こちらの記事を参照してください。

于 2013-09-04T17:48:28.577 に答える