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

Создание экземпляра класса в Python.

Операция создания экземпляра - ”вызов" объекта класса. Единственные операции, понятные экземплярам класса, являются ссылки на атрибуты класса. Существует два вида допустимых имен атрибутов класса, это атрибуты данных и методы класса.

Атрибуты данных соответствуют "переменным экземпляра" в языке Smalltalk и "членам данных" в языке C++. Атрибуты данных класса в Python можно не объявлять подобно локальным переменным, они могут динамически появляться в момент присвоения значений. Например, если x это экземпляр MyClass, следующий фрагмент кода напечатает значение 16, не оставляя следа:

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

    def f(self):
        return 'hello world'

x = MyClass()
x.counter = 1
while x.counter < 10:
    x.counter = x.counter * 2
print(x.counter)
# 16
del x.counter
x.counter
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# AttributeError: 'MyClass' object has no attribute 'counter'

Другой вид ссылки на атрибут экземпляра - это метод. Метод - это функция, которая принадлежит объекту класса. В языке Python термин метод не уникален для экземпляров классов: другие типы объектов также могут иметь методы. Например, объекты списка list() имеют методы list.append, list.insert, list.remove, list.sort и т. д. Дальше будем использовать термин метод исключительно для обозначения методов объектов экземпляра класса, если явно не указано иное.

Допустимые имена методов объекта экземпляра класса зависят от его класса. По определению, все атрибуты класса, которые являются объектами функции, определяют соответствующие методы его экземпляров. Таким образом, в нашем примере x.f это допустимая ссылка на метод, так как MyClass.f это функция, тогда как x.i это не метод, так как MyClass.i это атрибут данных. Но x.f это не то же самое, что MyClass.f. MyClass.f - это объект метода , а не объект функции.

>>> MyClass.f
# <function MyClass.f at 0x7f3c1c409400>
>>> x.f
# <bound method MyClass.f of <__main__.MyClass object at 0x7f3c1fd67710>>

>>> MyClass.i
# 12345
>>> x.i
# 12345