免責事項これはメタプログラミングの単なる実践です。実際の目的は ではありません。効果がない関数に__getattr__と__getitem__を定義しても意味がありません
私は関数オブジェクトに__getitem__
と
__getattr__
メソッドを割り当てた
が、 ...
def foo():
print "foo!"
foo.__getitem__ = lambda name: name
foo.__getattr__ = lambda name: name
foo.baz = 'baz'
正気我々は機能にプロパティを割り当てることができることを確認してください。
>>> foo.baz
'baz'
ニート。 "魔法のゲッター"はどうですか?
>>> foo.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'bar'
>>> foo['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'function' object is not subscriptable
>>> getattr(foo, 'bar')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'bar'
関数オブジェクトに「マジックゲッター」を付けることはできますか?
@kindallはこれを以下に指摘しますが、ここではそれを言及して回答にとどまります。新しいスタイルのクラスは、 '__getattr__'とその仲間との"通常の "メソッド解決法を使用しません。 'a.foo'は内部的に' type(a).__ getattr __( 'foo') 'に翻訳されます。したがって 'a____ dict__'に格納されている' __getattr__'プロパティは見つかりません。希望// – colinta