Сообщить об ошибке.

Объект класса в Python.

Объекты класса поддерживают два вида операций: ссылки на атрибуты и создание экземпляров.

Ссылки на атрибуты используют стандартный синтаксис, используемый для всех ссылок на атрибуты в Python: obj.name. Допустимые имена атрибутов - это все имена, которые были определены в пространстве имен класса при создании объекта класса.

Итак, если определение класса выглядит так:

class MyClass:
    """Простой пример класса"""
    i = 12345

    def f(self):
        return 'hello world'

>>> MyClass.i
# 12345
>>> MyClass.f
# <function MyClass.f at 0x7f3c1fd6e840>

тогда имя MyClass - это объект класса, а MyClass.i и MyClass.f являются действительными ссылками на атрибуты класса, возвращая целое число и функциональный объект соответственно. Атрибуты объекта класса также могут быть присвоены, так что можно изменить значение MyClass.i путем операции присвоения. __doc__ также является допустимым атрибутом, возвращающим строку документации "Простой пример класса", принадлежащую классу MyClass.

Экземпляр класса использует нотацию функций. Представьте, что объект класса - это функция без параметров, которая возвращает новый экземпляр класса. Пример ниже создает новый экземпляр класса и присваивает этот объект локальной переменной x:

x = MyClass()
>>> x.i
# 12345
>>> x.f()
# 'hello world'

Конструктор класса __init__().

Операция создания экземпляра класса это ”вызов" объекта класса. Объекты классов обычно создают с экземплярами, настроенными на определенное начальное состояние. Для этого в классе языка Python можно определить специальный метод "конструктор класса" с именем __init__(), который выполняется при создании экземпляра класса.

class MyClass:
    """Простой пример класса"""
    i = 12345

    def __init__(self):
        self.data = []

    def f(self):
        return 'hello world'

Когда в классе определен метод __init__(), экземпляр класса автоматически вызывает __init__() для вновь созданного экземпляра класса. Таким образом, в примере ниже, новый инициализированный экземпляр может быть получен с помощью:

>>> MyClass.data
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# AttributeError: type object 'MyClass' has no attribute 'data'

>>> x = MyClass()
>>> x.data
# []

Метод __init__() может иметь аргументы для большей гибкости. В этом случае аргументы, переданные оператору создания класса, передаются в метод __init__(). Например:

>>> class Complex:
...     def __init__(self, realpart, imagpart):
...         self.r = realpart
...         self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)