Возможно ли динамически назначать специальные методы, такие как __getitem__
экземпляру класса используя setattr()
? Например, если у меня есть это:
class Example (object):
pass
А затем попробуйте это:
>>> example = Example()
>>> setattr(example, '__getitem__', lambda x: 1)
Я получаю это:
>>> example['something']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Example' object has no attribute '__getitem__'
Но, конечно, это прекрасно работает:
>>> example.__getitem__('something')
1
Здесь явно происходит что-то, чего я не понимаю относительно как Python выполняет поиск методов для такого рода вещей. Нужно ли устанавливать эти методы в class, а не в экземпляре?
ОБНОВЛЕНИЕ:
Итак, я должен пояснить, что я знаю, что могу видеть это в классе Example
... Я надеялся, что есть способ установить их per-instance, но консенсус, который я вижу до сих пор, заключается в том, что вы не можете этого сделать.