Перейти до основного вмісту
Модуль 7 · Урок 1 із 425/36 у курсі~14 min
Модульні уроки (1/4)

Класи та екземпляри

Клас — це план для створення об’єктів, які мають дані (атрибути) і поведінка (методи). Примірник — це конкретний об’єкт, створений з клас.

Мінімальний синтаксис

Python
class Cane:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def abbaia(self):
        return f"{self.nome} dice WOOF!"

# creazione di istanze
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

fido.nome       # 'Fido'
fido.abbaia()   # 'Fido dice WOOF!'

__init__: "конструктор"

Метод __init__ викликається автоматично, коли ви створюєте примірник (Cane("Fido", 3)). Він використовується для ініціалізації атрибутів.

Технічно це не конструктор (об’єкт уже створено __new__), але це місце, де ви встановлюєте початковий стан.

self: перший параметр

self — це посилання на екземпляр, у якому було викликано метод. Це а конвенція (не ключове слово) і є завжди першим параметром екземпляра методи.

Python
fido.abbaia()
# equivalente a Cane.abbaia(fido)
# Python passa fido come self automaticamente

Екземпляр проти атрибутів класу

Python
class Cane:
    specie = "Canis familiaris"   # attributo di CLASSE (condiviso)

    def __init__(self, nome):
        self.nome = nome           # attributo di ISTANZA (per ognuno)

fido = Cane("Fido")
luna = Cane("Luna")

fido.nome       # 'Fido'        (istanza)
luna.nome       # 'Luna'        (istanza)
fido.specie     # 'Canis familiaris'  (cercato sulla classe)
Cane.specie     # 'Canis familiaris'

Кілька методів і стан

Python
class Contatore:
    def __init__(self, inizio=0):
        self.valore = inizio

    def incrementa(self, di=1):
        self.valore += di

    def reset(self):
        self.valore = 0

c = Contatore()
c.incrementa()
c.incrementa(di=5)
c.valore       # 6
c.reset()
c.valore       # 0

Ваша черга

вправи#python.m7.l1.e1
Спроби: 0Завантаження…

Визначте клас `Point` з __init__(self, x, y), який зберігає атрибути. Додайте метод `distance_from_origin`, який повертає квадратний корінь з x^2 + y^2. Створіть `p = Point(3, 4)` і обчисліть `p.distance_from_origin()`.

Завантаження редактора…
Показати підказку

math.sqrt(self.x ** 2 + self.y ** 2)

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m7.l1.e2
Спроби: 0Завантаження…

Визначте `BankAccount` за допомогою __init__(self, balance=0) і методи `deposit(amount)`, `withdraw(amount)`, які змінюють self.balance. Створіть `a = BankAccount(100)`, внесіть 50, зніміть 30. Оцініть `a.balance`.

Завантаження редактора…
Показати підказку

self.balance += сума на депозиті.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m7.l1.e3
Спроби: 0Завантаження…

Define a class `Rectangle` with a constructor `__init__(self, width, height)` to set width and height, and a method `area(self)` that returns the product of width and height. Instantiate a rectangle with width `4` and height `5` storing it in `rect`, and evaluate `rect.area()`.

Завантаження редактора…
Показати підказку

Не забувайте використовувати self для доступу до атрибутів усередині area(self).

Рішення доступне після 3 спроб