"Python - модули, пакеты, классы, экземпляры" - читать интересную книгу автора (Бройтман Олег)


Питон - объектно-ориентированный язык со множественным наследованием.
Можно сказать, что Питон поддерживает классическую ОО-модель с некоторыми
особенностями. Классы в Python могут иметь статические переменные,
разделяемые всеми экземплярами класса, но не могут иметь статических
методов. Все методы относятся к экземплярам класса. Все методы можно
переопределять в наследниках. Ссылка на объект (экземпляр класса) передается
в методы в явном виде, в первом параметре. Традиционно эту переменную
называют self. Какого-то общего предка всех классов (типа Object) в Python
нет. Вообще в ОО-программировании в Питоне важно не кто от кого наследуется,
а какой поддерживается интерфейс; наследование лишь дает реализацию.
Формальных механизмов проверки интерфейсов пока нет, но возможно они будут
включены в язык и библиотеки; Zope делает шаги в этом направлении.
Конструктор и деструктор класса называются __init__ и __del__
(встроенные и служебные имена в Питоне обозначаются двумя подчеркиваниями
перед и после имени; это всего лишь соглашение, язык не запрещает
программисту писать собственные методы с такими именами). Вернее было бы
назвать эти методы initializer и finalizer - они сами не размещают и не
освобождают память (это делает за них интерпретатор), они инициализируют и
очищают свои переменные.
В Питоне нет отдельного оператора new для создания экземпляров класса.
Для создания экземпляра класса вызывается класс с необходимыми параметрами.
Эти параметры передаются в __init__. Метод __del__, конечно, вызывается без
параметров (кроме, естественно, self). Для удаления объектов (и не только
экземпляров классов) в Питоне есть оператор del.
Пример.
class Foo:
bar = "baz"

def __init__(self, foo):
self.foo = foo

def __del__(self):
del self.foo

foo = Foo(12)
del foo
Описание класса создает новое пространство имен, в котором определяются
статические переменные (в нашем примере это bar) и методы. Создание
экземпляра порождает пространство имен объекта, доступ к которому
осуществляется через переменную экземпляра класса foo, а внутри методов
класса - через переменную self.
Классы в Питоне позволяют программисту создавать новые типы данных и
определять для них все операции, доступные для встроенных типов. Например,
метод __getitem__ позволяет индексировать объект, а __setitem__ -
присваивать индексу объекта. Метод __getitem__ также позволяет объекту
участвовать в цикле for, эмулируя последовательность (sequence). Есть
методы, позволяющие объекту эмулировать булевские значения и участвовать в
операторах if и while. Методы __getattr__ и __setattr__ позволяют читать и
писать атрибуты объектов. Метод __call__ позволяет вызывать экземпляр класса