Методы классов в Python — как и когда использовать
В этом уроке вы узнаете о методах классов Python и о том, как и когда их правильно использовать.
- Введение в методы класса в Python
- Вызов методов класса 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.