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
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.
fido.abbaia()
# odpowiednik zapisu Cane.abbaia(fido)
# Python automatycznie przekazuje fido jako selfAtrybuty instancji a atrybuty klasy
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
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 # 0Spróbuj sam
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()`.
Pokaż wskazówkę
math.sqrt(self.x ** 2 + self.y ** 2)
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
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`.
Pokaż wskazówkę
self.balance += amount w metodzie deposit.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
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()`.
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