Язык программирования Python.

Объекты.

До этой лекции объекты Python встречались много раз: ведь каждое число, строка, функция, модуль и т.п. — это объекты. Некоторые встроенные объекты имеют в Python синтаксическую поддержку (для задания литералов). Таковы числа, строки, списки, кортежи и некоторые другие типы.

Теперь следует посмотреть на них в свете только что приведенных определений. Пример:

A = 3.

B = 4.0.

C = a + b.

Здесь происходит следующее. Сначала имя « a» связывается в локальном пространстве имен с объектом–числом 3 (целое число). Затем « b» связывается с объектом–числом 4.0 (число с плавающей точкой). После этого над объектами 3 и 4.0 выполняется операция сложения, и имя « c» связывается с получившимся объектом. Кстати, операциями, в основном, будут называться методы, которые имеют в Python синтаксическую поддержку, в данном случае — инфиксную запись. То же самое можно записать как:

C = a.__add__(b).

Здесь __add__() — метод объекта a, который реализует операцию + между этим объектом и другим объектом.

Узнать набор методов некоторого объекта можно с помощью встроенной функции dir():

>>> dir(a).

['__abs__', '__add__', '__and__', '__class__', '__cmp__',

 '__coerce__', '__delattr__', '__div__', '__divmod__',

 '__doc__', '__float__', '__floordiv__', '__getattribute__',

 '__getnewargs__', '__hash__', '__hex__', '__init__',

 '__int__', '__invert__', '__long__', '__lshift__',

 '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__',

 '__oct__', '__or__', '__pos__', '__pow__', '__radd__',

 '__rand__', '__rdiv__', '__rdivmod__', '__reduce__',

 '__reduce_ex__', '__repr__', '__rfloordiv__',

 '__rlshift__', '__rmod__', '__rmul__', '__ror__',

 '__rpow__', '__rrshift__', '__rshift__', '__rsub__',

 '__rtruediv__', '__rxor__', '__setattr__', '__str__',

 '__sub__', '__truediv__', '__xor__'].

Здесь стоит указать на еще одну особенность Python. Не только инфиксные операции, но и встроенные функции ожидают наличия некоторых методов у объекта. Например, можно записать:

Abs(c).

А функция abs() на самом деле использует метод переданного ей объекта:

C.__abs__().

Объекты появляются в результате вызова функций–фабрик или конструкторов классов (об этом ниже), а заканчивают свое существование при удалении последней ссылки на объект. Оператор del удаляет имя (а значит, и одну ссылку на объект) из пространства имен:

A = 1.

# ...

Del a.

# имени a больше нет.