✦ Srednji nivo Pythona i OOP Srednji nivo Pythona

L2 · Koncept 06 · Osnove OOP-a

Zaštitite podatke knjige.
Sačuvajte ispravno stanje.

Mini Library Manager sada proverava godinu izdanja knjige kroz jasan interfejs svojstva.

Cilj učenjaKoristite _year, @property i setter da proverite pozitivnu celu godinu bez ostavljanja Book objekta u neispravnom stanju.
01 Uči02 Isprobaj03 Predvidi

Učenje kao gost

Učiš kao gost — sačuvaj svoj napredak!

Napravi besplatan nalog i uči uz Sloby AI mentora, proveru razumevanja i praćenje napretka.

Cela platforma je besplatna tokom 2026. Foundations ostaje zauvek besplatan.

Kontrolišite kako se knjiga menja.

Enkapsulacija grupiše podatke sa pravilima koja ih štite. U Pythonu, vodeća donja crta kao _year je konvencija za internu upotrebu, a ne stroga zabrana pristupa.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.is_available = True
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, value):
        if not isinstance(value, int) or value <= 0:
            raise ValueError("year must be a positive integer")
        self._year = value

    def borrow(self):
        self.is_available = False

    def return_book(self):
        self.is_available = True

book = Book("Dune", "Frank Herbert", 1965)
try:
    book.year = 0
except ValueError:
    pass
print(book.year)

self.year = year poziva setter pri kreiranju, pa validacija štiti i početnu vrednost. Setter proverava vrednost pre dodele self._year.

1965

Neuspešna dodela podiže ValueError pre promene _year. Nakon hvatanja greške, ranija ispravna godina ostaje 1965.

↳

Obrazac svojstva: Čitajte book.year kroz getter. Dodelite book.year = value kroz setter. Zadržite _year kao internu sačuvanu vrednost.

Validirajte pre promene stanja
class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.is_available = True
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, value):
        if not isinstance(value, int) or value <= 0:
            raise ValueError("year must be a positive integer")
        self._year = value

    def borrow(self):
        self.is_available = False

    def return_book(self):
        self.is_available = True

book = Book("Dune", "Frank Herbert", 1965)
try:
    book.year = 0
except ValueError:
    pass
print(book.year)

Javno svojstvo year je jednostavno za korišćenje, dok njegov setter odbija nultu, negativnu ili necelobrojnu godinu.

Pažljiv setter
@year.setter
def year(self, value):
    if not isinstance(value, int) or value <= 0:
        raise ValueError("year must be a positive integer")
    self._year = value

Prvo validirajte, a zatim dodelite. Taj redosled znači da neispravan unos ne može prepisati ispravnu sačuvanu vrednost.

Pratite zaštićeno ažuriranje

  1. 1. Koristite javno svojstvobook.year = 1965 poziva setter umesto direktnog upisivanja u _year.
  2. 2. Validirajte novu vrednostSetter prihvata samo pozitivne cele brojeve, a u suprotnom podiže ValueError.
  3. 3. Sačuvajte nakon validacijeSamo ispravna vrednost stiže do self._year.
  4. 4. Sačuvajte ranije stanjeNeuspešna dodela ostavlja prethodno ispravnu godinu knjige nepromenjenom.

Česte greške

  • Pisanje self.year unutar setteraKoristite self._year u setteru; dodela self.year tamo ponovo poziva setter.
  • Dodela pre validacijeProverite vrednost pre promene _year kako neispravno stanje nikada ne bi bilo sačuvano.
  • Tretiranje _year kao strogo privatnogDonja crta je konvencija koja označava internu upotrebu; Python ne blokira direktan pristup.
  • Zaboravljanje validacije u __init__Dodelite self.year = year u __init__ kako bi kreiranje koristilo isto pravilo settera.

Python radni prostor

Učitavanje Python okruženja…

Isprobajte ispravno ažuriranje godine, zatim neispravnu vrednost unutar try/except i proverite sačuvanu godinu.

book_property.pyPython
IzlazČeka se Python
Okruženje pregledača se učitava. I dalje možeš da menjaš primer koda.

Pyodide pokreće Python u Web Worker-u pregledača. Zaustavlja se i ponovo pokreće ako se kod predugo izvršava. Izvršavanje u pregledaču nije potpuna bezbednosna granica; ne unosi tajne i ne oslanjaj se na njega za izolaciju nepouzdanog koda.

Šta će ovaj program ispisati?

Setter odbija nulu pre nego što može zameniti postojeću ispravnu godinu.

class Book:
    def __init__(self, title, author, year):
        self.title = title
        self.author = author
        self.is_available = True
        self.year = year

    @property
    def year(self):
        return self._year

    @year.setter
    def year(self, value):
        if not isinstance(value, int) or value <= 0:
            raise ValueError("year must be a positive integer")
        self._year = value

    def borrow(self):
        self.is_available = False

    def return_book(self):
        self.is_available = True

book = Book("Dune", "Frank Herbert", 1965)
try:
    book.year = 0
except ValueError:
    pass
print(book.year)
Izaberi izlaz

Vežbajte samostalno

Mini izazov — Validirajte ocenu

Dodajte jedno jednostavno validirano svojstvo u Book bez zaobilaženja njegovog internog stanja.

Vaš ciljNapravite svojstvo rating koje prihvata samo cele brojeve od 1 do 5 i podiže ValueError za druge vrednosti.

rating_property_challenge.py

Opcioni nagoveštaji
  • Koristite @property iznad def rating(self), a zatim @rating.setter iznad def rating(self, value).
  • Proverite isinstance(value, int) i 1 <= value <= 5 pre dodele self._rating.
Pitajte Slobyja za nagoveštaj
Sloby, maskota Python AI Tutora

Tvoj mentor za učenje

Prijavite se da pitate Slobyja

Napravite besplatan nalog ili se prijavite za AI smernice tokom učenja.

Prijavite se da proverite svoje razumevanje

Napravite besplatan nalog ili se prijavite da biste dobili AI povratnu informaciju i sačuvali napredak u učenju.

Python AI Tutor · Uči razumevanjem, a ne samo pokretanjem koda.