Salt la conținutul principal
Modulul 7 · Lecția 1 din 425/36 în curs~14 min
Lecții din modul (1/4)

Clase și instanțe

O clasă este un plan pentru crearea de obiecte care au date (atribute) și comportament (metode). O instanță este un obiect concret creat din clasa.

Sintaxă minimă

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__: „constructorul”

Metoda __init__ este numită automat când creați o instanță (Cane("Fido", 3)). Este folosit pentru a inițializa atributele.

Din punct de vedere tehnic, nu este un constructor (obiectul a fost deja creat de __new__), dar este locul în care setați starea inițială.

self: primul parametru

self este referința la instanța pe care a fost apelată metoda. Este o convenție (nu un cuvânt cheie) și este întotdeauna primul parametru al instanței metode.

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

Instanță vs atribute de clasă

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'

Mai multe metode și stare

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

Rândul tău

Exercițiu#python.m7.l1.e1
Încercări: 0Se încarcă…

Definiți o clasă `Point` cu __init__(self, x, y) care stochează atributele. Adăugați o metodă `distanța_de_origin`` care returnează rădăcina pătrată a lui x^2 + y^2. Creați `p = Point(3, 4)` și evaluați `p.distance_from_origin()`.

Se încarcă editorul...
Afișează indiciu

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

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m7.l1.e2
Încercări: 0Se încarcă…

Definiți `BankAccount` cu __init__(self, sold=0) și metodele `deposit(amount)`, `draw(amount)` care modifică self.balance. Creați `a = BankAccount(100)`, depuneți 50, retrageți 30. Evaluați `a.balance`.

Se încarcă editorul...
Afișează indiciu

self.balance += suma în depozit.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m7.l1.e3
Încercări: 0Se încarcă…

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()`.

Se încarcă editorul...
Afișează indiciu

Nu uitați să utilizați self pentru a accesa atributele din interiorul zonei (self).

Soluție disponibilă după 3 încercări