Перейти к основному содержимому
Модуль 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 для доступа к атрибутам внутри области (self).

Решение доступно после 3 попыток