Przejdź do głównej treści
eLearner.app
Moduł 7 · Lekcja 1 z 425/36 w kursie~14 min
Lekcje modułu (1/4)

Klasy i instancje

Klasa to schemat (szablon) do tworzenia obiektów, które posiadają dane (atrybuty) oraz zachowania (metody). Instancja to konkretny obiekt utworzony na podstawie klasy.

Podstawowa składnia

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

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

# tworzenie instancji
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

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

__init__: "konstruktor"

Metoda __init__ jest wywoływana automatycznie podczas tworzenia instancji (Cane("Fido", 3)). Służy do inicjalizacji atrybutów obiektu.

Technicznie rzecz biorąc, nie jest to konstruktor (obiekt został już utworzony przez __new__), ale jest to miejsce, w którym ustawia się stan początkowy.

self: pierwszy parametr

self to odniesienie do instancji, na rzecz której została wywołana metoda. Jest to konwencja (nie słowo kluczowe) i zawsze jest pierwszym parametrem metod instancji.

Python
fido.abbaia()
# odpowiednik zapisu Cane.abbaia(fido)
# Python automatycznie przekazuje fido jako self

Atrybuty instancji a atrybuty klasy

Python
class Cane:
    specie = "Canis familiaris"   # atrybut KLASY (wspólny)

    def __init__(self, nome):
        self.nome = nome           # atrybut INSTANCJI (dla każdej osobny)

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

fido.nome       # 'Fido'        (instancja)
luna.nome       # 'Luna'        (instancja)
fido.specie     # 'Canis familiaris'  (szukany w klasie)
Cane.specie     # 'Canis familiaris'

Wiele metod i stan

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

Spróbuj sam

Ćwiczenie#python.m7.l1.e1
Próby: 0Ładowanie...

Zdefiniuj klasę `Point` z konstruktorem __init__(self, x, y) zapisującym atrybuty. Dodaj metodę `distance_from_origin` zwracającą pierwiastek kwadratowy z x^2 + y^2. Utwórz `p = Point(3, 4)` i oceń `p.distance_from_origin()`.

Ładowanie edytora...
Pokaż wskazówkę

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

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#python.m7.l1.e2
Próby: 0Ładowanie...

Zdefiniuj klasę `BankAccount` z konstruktorem __init__(self, balance=0) oraz metodami `deposit(amount)` i `withdraw(amount)` modyfikującymi self.balance. Utwórz `a = BankAccount(100)`, wpłać 50, wypłać 30. Oceń `a.balance`.

Ładowanie edytora...
Pokaż wskazówkę

self.balance += amount w metodzie deposit.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m7.l1.e3
Próby: 0Ładowanie...

Zdefiniuj klasę `Rectangle` z konstruktorem `__init__(self, width, height)` ustawiającym szerokość i wysokość, oraz metodą `area(self)` zwracającą ich iloczyn. Utwórz instancję prostokąta o szerokości `4` i wysokości `5` przypisując ją do `rect`, a następnie oceń `rect.area()`.

Ładowanie edytora...
Pokaż wskazówkę

Pamiętaj o użyciu self do uzyskania dostępu do atrybutów wewnątrz area(self).

Rozwiązanie dostępne po 3 próbach