3.1 Створення класу
Створення класів у Python — важлива частина об'єктно-орієнтованого програмування (ООП). Класи дозволяють створювати нові типи даних, які можуть мати свої власні атрибути та методи. Давай розглянемо основні поняття і приклади створення класів у Python.
Основні поняття
- Клас: шаблон для створення об'єктів. Клас визначає атрибути та методи, які будуть у об'єктів цього класу.
- Об'єкт: екземпляр класу. Об'єкт володіє всіма атрибутами та методами, визначеними в класі.
- Атрибут: змінна, пов'язана з класом або об'єктом.
- Метод: функція, пов'язана з класом або об'єктом.
Атрибути — це, по суті, внутрішні змінні об'єкта або класу. Методи — це функції, визначені всередині класу. Ці терміни прийшли з ООП і використовуються нарівні з функціями та змінними.
Для оголошення (створення) нового класу використовується ключове слово class. Загальний синтаксис цієї операції виглядає так:
class Ім'яКласу:
змінна1 = значення1
зміннаN = значенняN
def функція1(self):
код функції
def функціяM(self):
код функції
Фактично, можна сказати, що клас — це невелика програма (змінні + функції), поміщена в окрему названу область — Ім'яКласу.
Після того як ти створив клас, ти можеш створювати об'єкти (екземпляри) цього класу. Цей код виглядає ще простіше:
зміннаХ = Ім'яКласу()
Важливо! Імена змінних та методів у Python прийнято писати з маленької літери. Імена класів — з великої. Також при написанні імен класів не використовуються символи підкреслення. Якщо ім'я класу повинно складатися з декількох слів, то кожне з них пишеться з великої літери.
Якщо ти хочеш звернутися до змінної класу/об'єкта, то зазвичай цей код виглядає так:
зміннаХ.змінна1 = 10
зміннаХ.функціяM()
Але тут не без нюансів, про які далі…
3.2 Робота з об'єктом
І клас, і екземпляр класу (об'єкт класу) є об'єктами, тому і у першого, і у другого можуть бути свої змінні та методи.
Існують два типи змінних:
- Атрибут/Змінна/Поле класу
(class property) - Атрибут/Змінна/Поле об'єкта
(object property)
І цілих три типи методів:
- Метод/Функція класу
(class method) - Метод/Функція об'єкта
(instance method) - Статичний метод
(static method)
Методи відрізняються способом свого оголошення і тим, як вони викликаються.
Методи об'єкта
При оголошенні методу об'єкта в нього потрібно передати перший обов'язковий параметр — self. При виклику методу в цей параметр передається посилання на об'єкт (instance).
class MyClass:
def instance_method(self):
print(type(self)) # <class 'MyClass'>
my_object = MyClass()
my_object.instance_method()
У прикладі вище, коли почала виконуватися функція instance_method(), в параметр self була передана посилання на об'єкт my_object.
Методи класу
При оголошенні методу класу в нього теж потрібно передати перший обов'язковий параметр — cls. При виклику методу в цей параметр передається посилання на клас (class object). Також метод класу потрібно позначити декоратором classmethod, як у прикладі нижче:
class MyClass:
def instance_method(self):
print(type(self)) # <class 'MyClass'>
@classmethod
def class_method(cls):
print(type(cls)) # <class 'type'>
my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
У прикладі вище, коли почала виконуватися функція class_method(), в параметр cls була передана посилання на клас MyClass.
Статичний метод
При оголошенні статичного методу в нього нічого не потрібно передавати, але він і не зможе звертатися до внутрішніх даних класу. Також метод потрібно позначити декоратором staticmethod, як у прикладі нижче:
class MyClass:
def instance_method(self):
print(type(self)) # <class 'MyClass'>
@classmethod
def class_method(cls):
print(type(cls)) # <class 'type'>
@staticmethod
def static_method():
return "Цей метод не залежить від екземпляра або класу"
my_object = MyClass()
my_object.instance_method()
MyClass.class_method()
MyClass.static_method()
Статичний метод викликається дуже схоже на метод класу, але ні посилання на об'єкт, ні посилання на клас в нього не передаються.
3.3 Змінні класу
Змінні класу
Для того щоб оголосити змінну (атрибут) класу, її потрібно просто оголосити в будь-якому місці всередині класу. Зазвичай це роблять на самому початку, до оголошення методів класу. Приклад:
class MyClass:
attribute = "Я атрибут класу"
@classmethod
def class_method(cls):
print(cls.attribute) # Я атрибут класу
my_object = MyClass()
MyClass.class_method()
Якщо ви хочете прочитати чи записати значення у змінну класу, то використовуйте об'єкт cls.
В принципі, до змінної класу можна звернутися і через ім'я класу:
class MyClass:
attribute = "Я атрибут класу"
@classmethod
def class_method(cls):
print(MyClass.attribute) # Я атрибут класу
my_object = MyClass()
print(MyClass.attribute) # Я атрибут класу
Змінні/поля об'єкта
Змінні об'єкта (instance) — це поля об'єкта self. Ти просто працюєш з ними через self.name. Саме для цього об'єкт self і передається в кожен метод об'єкта.
Приклад:
class MyClass:
attribute = "Я атрибут класу"
def set_name(self, name):
self.name = name
def print_name(self):
print(self.name)
my_object = MyClass()
my_object.set_name("Поле об'єкта за ім'ям name")
my_object.print_name() # "Поле об'єкта за ім'ям name"
Кожен раз, коли ти викликаєш метод об'єкта, як перший параметр (self) передається посилання на об'єкт, у якого ти викликаєш метод. Різні методи об'єкта можуть звертатися до загальних даних через використання об'єкта self.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ