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

Содержимое удалено Содержимое добавлено
м →‎Наследование: орфография
Строка 2612:
В создании экземпляров производных классов нет ничего особенного: <code>DerivedClassName()</code> создаёт новый экземпляр класса. Ссылки на методы разрешаются следующим образом: производится поиск соответствующего атрибута класса (спускаясь вниз по цепочке базовых классов, если необходимо) и ссылка на метод считается корректной, если она порождает объект-функцию.
 
Производные классы могут перегружать методы своих базовых классов. Поскольку у методов нет особых привелегийпривилегий при вызове других методов того же объекта, метод базового класса, вызывающий другой метод, определённый в этом же классе может закончить на вызове метода производного класса, его перегружающего. (Для программистов на C++: все методы в Python фактически виртуальны.)
 
При перегрузке метода в производном классе возможна не только замена действия метода базового класса с тем же именем, но и его расширение. Существует простой способ вызвать метод базового класса прямым образом: просто вызовите "<code>ИмяБазовогоКласса.имяметода(self, аргументы)</code>". Такой способо будет неожиданно полезным и для клиентов. (Обратите внимание, что он работает только если базовый класс определён и импортирован прямо в глобальную область видимости.)
Строка 2638:
Для классов в новом стиле, порядок разрешения методов<ref>''(Прим. перев.)'' другими словами — поиска корректной привязки для метода</ref> (<tt>method resolution order</tt>) меняется динамически, чтобы обеспечить возможность совместных вызовов <code>super()</code>. Этот способ известен в некоторых других языках с поддержкой множественного наследования как "вызов-следующего-метода" („<tt>call-next-method</tt>“) и имеет больше возможностей, чем вызов родительского метода в языках с единичным наследованием.
 
В случае классов в новом стиле, динамическое упорядочивание (<tt>dynamic ordering</tt>) имеет большую важность, поскольку все вариации множественного наследования проявляют в себе эффект ромбовых отношений (когда как минимум один родительский класс может быть доступен различными путями из низшего в иерархии класса). Например, все классы нового стиля наследуются от <code>object</code>, так что множественное наследование в любом виде предоставляет более одного пути для того, чтобы достичь <code>object</code>. Чтобы защитить базовые классы от двойных и более запросов, динамический алгоритм «выпрямляет» (<tt>linearizes</tt>) порядок поиска так способом, что тот сохраняет указанный слева-направо порядок для каждого класса, который вызывает каждый родительский класс только единожды и является монотонным (значит, класс можно сделать наследником, не взаимодействуя с порядком предсшествованияпредшествования его родителей). Обобщённые вместе, эти свойства позволяют разрабатывать надёжные и расширяемые классы, используя множественное наследование. С подробностями можно ознакомиться по этой ссылке: http://www.python.org/download/releases/2.3/mro/ ([[Python — Порядок разрешения методов|перевод]]).
 
=== Приватные переменные ===