Я считаю, следующий пример слегка удивительно:Python правило подстановки метод
>>> class Foo:
def blah(self):
pass
>>> f = Foo()
>>> def bar(self):
pass
>>> Foo.bar = bar
>>> f.bar
<bound method Foo.bar of <__main__.Foo object at 0x02D18FB0>>
Я ожидал, что связанный метод, чтобы быть связан с каждым конкретным экземпляром, и для размещения в нем при строительстве. Представляется логичным, что связанный метод должен быть различным для каждого экземпляра, так что он знает, какой экземпляр перейти в к основной функции - и, в самом деле:
>>> g = Foo()
>>> g.blah is f.blah
False
Но мое понимание процесса, несомненно, недостатки , так как я не ожидал, что назначение функции в атрибут класса приведет к тому, что уже был создан к.
Итак, мой вопрос заключается в два раза -
- Почему назначение функции в классе применяются задним числом экземпляров? Каковы фактические правила и процессы поиска, которые делают это так?
- Является ли это чем-то гарантированным языком или просто случаем?
А, справа.Я не понял/забыл, что протокол дескриптора передал экземпляр в '__get__'. Это научит меня читать * все * соответствующие документы. :-) – lvc
cf http://wiki.python.org/moin/FromFunctionToMethod для получения дополнительной информации об этом. –