Методы классов в Python — как и когда использовать

В этом уроке вы узнаете о методах классов Python и о том, как и когда их правильно использовать.

Содержание

Введение в методы класса в Python

Ранее вы узнали о методах экземпляра, привязанных к конкретному экземпляру класса. Методы экземпляра могут получать доступ к переменным экземпляра внутри одного класса. Чтобы вызвать методы экземпляра, вам необходимо сначала создать экземпляр класса.

Следующий код определяет класс Person:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."

Класс Person имеет три метода экземпляра, включая __init__(), get_full_name() и introduce(). Предположим, вы хотите добавить в класс Person метод, создающий анонимного человека.

Для этого вам понадобится следующий код:

class Person:
    # ... other methods
    def create_anonymous(self):
        return Person('John', 'Doe', 25)

create_anonymous() — это метод экземпляра, который возвращает anonymous person. Однако для вызова метода create_anonymous() вам необходимо создать экземпляр, что в данном случае не имеет смысла.

Вот поэтому в игру вступают методы класса Python. Метод класса не привязан к какому-либо конкретному экземпляру. Он привязан только к классу.

Чтобы определить метод класса:

  • Сначала поместите декоратор @classmethod над определением метода. На данный момент вам просто нужно понять, что декоратор @classmethod изменит метод экземпляра на метод класса.
  • Во-вторых, переименуйте параметр self в cls. cls означает класс. Однако класс — это ключевое слово, поэтому вы не можете использовать его в качестве параметра.

Ниже показана новая версия класса Person:

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"

    def introduce(self):
        return f"Hi. I'm {self.first_name} {self.last_name}. I'm {self.age} years old."

    @classmethod
    def create_anonymous(cls):
        return Person('John', 'Doe', 25)

Метод create_anonymous() не может получить доступ к атрибутам экземпляра. Но он может получить доступ к атрибутам класса через переменную cls.

Вызов методов класса Python

Чтобы вызвать метод класса, вы используете имя класса, за которым следует точка, а затем имя метода, например:

ClassName.method_name()

В следующем примере показано, как вызвать метод класса create_anonymous() класса Person:

anonymous = Person.create_anonymous()
print(anonymous.introduce())

Выход:

Hi. I'm John Doe. I'm 25 years old.

Методы класса и методы экземпляра

В следующей таблице показаны различия между методами класса и методами экземпляра:

Функции Методы класса Методы экземпляра
Связь Class Экземпляр класса
Вызов Class.method() object.method()
Доступ Атрибуты класса Атрибуты экземпляра и класса

Когда использовать методы класса Python

Вы можете использовать методы класса для любых методов, которые не привязаны к конкретному экземпляру, а только к классу. На практике вы часто используете методы класса для методов, создающих экземпляр класса.

Когда метод создает экземпляр класса и возвращает его, этот метод называется фабричным методом. Например, create_anonymous() является фабричным методом, поскольку он возвращает новый экземпляр класса Person.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *