Определение __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'

Возможно ли иметь «магический геттер» для функционального объекта?

7
задан colinta 29 May 2012 в 16:48
поделиться