Jedna biblioteka, mnogo pojedinačnih knjiga.
Stavite atribut klase direktno unutar Book da bi bio zajednički. Stavite atribut instance na self u __init__ da biste svakoj knjizi dali sopstvenu vrednost.
class Book:
library_name = "Mini Library"
def __init__(self, title, author):
self.title = title
self.author = author
self.is_available = True
book = Book("Dune", "Frank Herbert")
print(Book.library_name)
print(book.title)library_name pripada klasi Book i zajednički je. title pripada objektu book, jer self.title pravi atribut na toj instanci.
Mini Library
DunePromena Book.library_name ažurira zajedničku vrednost za instance koje nemaju sopstveni library_name. Dodela book.library_name pravi poseban atribut instance koji zaklanja atribut klase.
Redosled traženja atributa: Kada Python čita book.library_name, prvo proverava book, a zatim klasu Book. Vrednost instance zato skriva zajedničku vrednost za tu jednu knjigu.
class Book:
library_name = "Mini Library"
def __init__(self, title, author):
self.title = title
self.author = author
self.is_available = True
book_one = Book("Dune", "Frank Herbert")
book_two = Book("The Hobbit", "J. R. R. Tolkien")
Book.library_name = "City Library"
book_one.library_name = "Personal Shelf"
print(book_one.library_name)
print(book_two.library_name)Book.library_name menja zajednički naziv u City Library. book_one tada dobija sopstvenu vrednost Personal Shelf, dok book_two i dalje koristi vrednost klase.
class Book:
library_name = "Mini Library" # class attribute
def __init__(self, title):
self.title = title # instance attributeKoristite atribut klase za jednu vrednost koju dele sve knjige. Koristite atribut instance za podatke koji se mogu razlikovati od knjige do knjige.
Pratite traženje atributa
- 1. Prvo pročitajte instancubook_one.library_name prvo traži library_name na book_one.
- 2. Zatim proverite klasuBez vrednosti instance, Python čita Book.library_name.
- 3. Promenite zajedničko stanjeBook.library_name = "City Library" menja vrednost koju koriste instance bez zaklanjanja.
- 4. Zaklonite jednu instancubook_one.library_name = "Personal Shelf" utiče samo na book_one.
Česte greške
- Korišćenje zajedničke liste za podatke pojedinačne knjigePromenljivi atribut klase kao tags = [] deli svaka instanca. Napravite novu listu na self u __init__ kada svaka knjiga treba sopstvene oznake.
- Očekivanje da dodela instanci ažurira sve knjigebook_one.library_name pravi ili menja samo vrednost book_one; ne menja Book.library_name.
- Smatranje svakog atributa zajedničkimtitle, author i is_available su atributi instance jer se dodeljuju kroz self.
- Zaboravljanje imena klase pri zajedničkom ažuriranjuKoristite Book.library_name da namerno ažurirate vrednost koju deli klasa.
