JavaRush /Курси /Модуль 1: Python Core /Створення класів та об'єктів

Створення класів та об'єктів

Модуль 1: Python Core
Рівень 9 , Лекція 2
Відкрита

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.

Коментарі (4)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Max Anokhin Рівень 35
11 січня 2026
Насправді, в ході курсу, тем і лекцій - згоден що деякі речі треба гуглити самостійно. Але, є але. В даній лекції рішення на поверхні. Не вимагають одразу використовувати конструктор (__init__), вона описується в наступній лекції. На поточній лекції достатньо вирішити задачі отриманими знаннями в даній лекції. Задача 1

class Car:
    make = 'Tesla'
    model = 'Model 3'
    year = 2018

    def display_info(self):
        print(f"Ваш автомобіль: {self.make}, {self.model}, {self.year}")

car = Car()
car.display_info()
Задача 2

class Library:
    books = []

    def add_book(self, name):
        self.books.append(name)

    def display_books(self):
        print(self.books)

library = Library()
library.add_book("1984 — George Orwell")
library.add_book("Brave New World — Aldous Huxley")
library.add_book("Fahrenheit 451 — Ray Bradbury")

library.display_books()
Тести проходять, і не обовʼязково використовувати GPT, щоб вирішити ці 2 задачки. Так GPT може видати більш складніший варіант при умові, якщо не хочеш думати самостійно, тоді і трапляється в його висновку що ти вже знаєш про "ініціалізацію/конструктори" класу. Тому навіщо вводити в оману новачків? Достатньо вирішити задачі отриманими знаннями в лекції... Маю досвід програмування в PHP, то курс дається легше (майже 2 тижні = 15 лвл). Є деякі моменти які не знаю і вирішується простими питаннями до GPT (для розʼяснення незрозумілого), але в цілому дуже все норм. Складно судити коли ти без досвіду, але головне бажання і вміння гуглити/gptʼться, та розібратись в тому що з першого разу не зрозумів.
negoda Рівень 31
11 серпня 2025
Половина примеров приведенные в лекции, выражаясь простым языком - безпонотовые. Особенно это касается статикметода, по примеру вообще не понятно для чего он нужен в сути и что это такое, понимание пришло только из интернета. Не понимаю почему нельзя было привести более конкретный и понятный пример использования статикметода.
Матвій Рівень 28
18 липня 2025

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
    def display_info(self):
        print(f"{self.make} {self.model} {self.year}")
car1 = Car("Lambo", "Urus", "2018")
car1.display_info()
Вирішення першої задачі щоб не гуглити про __init__
Євген Рівень 26
6 липня 2025
а де в тексті лекції опис функції __init__ , який необхідний для розв'язку завданння?