Python/Учебник Python 2.6: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Объекты-методы: пунктуация
Строка 2555:
будет печатать <code>'привет мир'<code> до конца времён.
 
Что конкретно происходит при вызове метода? Вы, возможно, заметили, что <code>x.f()</code> выше был вызван без аргументов, хотя в описании функции <code>f</code> аргумент был указан. Что же случилось с аргументом? Несомненно, Python порождает исключение, когда функция, требующая присутствия аргумента, вызвана без единого — даже, если он на самом деле не используется...
 
Теперь вы, возможно, догадались: отличительная особенность методов состоит в том, что в качестве первого аргумента функции передаётся объект. В нашем примере вызов <code>x.f()</code> полностью эквивалентен вызову <code>MyClass.f(x)</code>. В общем случае, вызов метода со списком из ''n'' аргументов эквивалентен вызову соответствующей функции со списком аргументов, созданным за счёт вставки объекта, вызвавшего метод, перед первым аргументом.
 
Если вы всё ещё не поняли, как работают методы, взгляд на реализацию, возможно, прояснит происходящее. Когда атрибут экземпляра ссылается на что-либо, не являющееся атрибутом-данными, производится поиск по классу. Если имя указывает корректный атрибут класса, являющийся объектом-функцией, создаётся метод: через упаковку (указателя на) объекта-экземпляра и найденного объекта-функции в абстрактный объект, получается объект-метод. Когда объект-метод вызывается со списком аргументов, он снова распаковывается и новый список аргументов конструируется из объекта-экземпляра и оригинального списка аргументов, и затем уже с новым списком аргументов вызывается объект-функция.
 
=== Различные замечания ===