Найти в Дзене
Властелин машин

Ключевые виды методов в классах Python

Чем сложнее метод, тем меньше свободы. Придерживаясь методов и правил, мы создаём себе ограничения (Брюс Ли).

Рассмотрим типы методов, создаваемых в классе, их различия и особенности использования. В качестве демонстрационного примера рассмотрим следующий класс:

В теле класса объявлены 3 типа методов - методы класса (декоратор @classmethod), статические методы (@staticmethod) и методы экземпляра (без декоратора). Первые имеют доступ к шаблону класса, его переменным (через первый аргумент), третьи к атрибутам класса и экземпляра (через первый аргумент), а вторые являются обособленными функциями, не имеющими доступ к состоянию класса и его объектов.

Для инициализации экземпляра класса в последующих примерах запишем json файл:

-2

Теперь рассмотрим особенности вызова перечисленных трех типов методов. На самом классе:

-3

from_json как метод класса корректно срабатывает и имеет доступ к переменной класса.

-4

Так же без проблем вызывается статический метод. А вот метод экземпляра использовать на классе не удастся:

-5

Теперь продемонстрируем, что все три метода успешно вызываются созданном выше на экземпляре класса (turkey1):

-6

Последний метод экземпляра класса получается доступ ко всем переменным и класса и экземпляра.

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

-7

Наука
7 млн интересуются