Stavite ponašanje knjige uz njene podatke.
Atributi opisuju stanje knjige. Metodi opisuju šta ta konkretna knjiga može da uradi. Svaki metod prvo prima self, pa može da čita ili ažurira atribute instance koja ga je pozvala.
class Book:
def __init__(self, title, author, available=True):
self.title = title
self.author = author
self.available = available
def borrow(self):
self.available = False
dune = Book("Dune", "Frank Herbert")
dune.borrow()
print(dune.available)Poziv dune.borrow() navodi Python da prosledi dune kao self. Metod menja dune.available, a ne dostupnost svake knjige.
FalseDruga instanca poziva istu definiciju metoda sa drugim self. Zato jedna knjiga može biti pozajmljena, dok druga ostaje dostupna.
Čitajte self kao „ova knjiga“: Unutar borrow, self.available znači atribut available instance Book koja je pre tačke u dune.borrow().
class Book:
def __init__(self, title, author, available=True):
self.title = title
self.author = author
self.available = available
def borrow(self):
self.available = False
def return_book(self):
self.available = True
def display_info(self):
print(f"{self.title} by {self.author}: {self.available}")
dune = Book("Dune", "Frank Herbert")
hobbit = Book("The Hobbit", "J. R. R. Tolkien")
dune.borrow()
dune.display_info()
hobbit.display_info()dune.borrow() menja samo dune. hobbit ima sopstveni atribut available, koji ostaje True.
def borrow(self):
self.available = False
def return_book(self):
self.available = True
def display_info(self):
print(self.title)borrow i return_book menjaju stanje. display_info čita atribute i prikazuje podatke bez promene knjige.
Pratite poziv metoda
- 1. Definišite ponašanje u klasiUvucite def borrow(self) unutar Book kako bi ga svaka Book instanca mogla koristiti.
- 2. Pozovite ga tačkomdune.borrow() bira ponašanje borrow za instancu dune.
- 3. Python prosleđuje selfPython prosleđuje dune kao self, pa se self.available odnosi na dune.available.
- 4. Proverite drugu instancuhobbit.available je nezavisan jer je hobbit drugačiji objekat.
Česte greške
- Izostavljanje selfMetodu instance je prvo potreban self da primi objekat koji ga je pozvao.
- Pisanje available umesto self.availableKoristite self.available da promenite atribut sačuvan na instanci.
- Pozivanje Book.borrow() bez objektaKoristite dune.borrow() kako bi Python znao koji Book treba pozajmiti.
- Očekivanje da jedan poziv metoda menja svaku instancuMetod menja samo objekat prosleđen kao self, osim ako izričito ne radi sa drugim objektima.
