Python – OOP

Klasa učenik koja ima polja ime, mat, hem i fiz, te metodu procjecnaOcjena koja racuna prosjek ocjena.

class Ucenik:
    def __init__(self, ime: str, mat: int, hem: int, fiz: int, razred: int):
        self.ime = ime
        self.mat = mat
        self.hem = hem
        self.fiz = fiz
        self.razred = razred
    
    def prosjecnaOcjena(self) -> float:
        return (self.mat + self.hem + self.fiz) / 3
        
    def povecajRazred(self):
        self.razred = self.razred + 1

# Primjer koristenja:
ucenik = Ucenik("Marko", 5, 4, 4, 1)
print(ucenik.prosjecnaOcjena())
ucenik.povecajRazred()
print(ucenik.razred)

Napraviti listu od 10 ucenka i ispisati prosjek za svakog ucenika:

imena = ["Marko", "Ana", "Ivan", "Luka", "Petar", "Jelena", "Nikola", "Maja", "Stefan", "Sara"]
ucenici = []

for ime in imena:
    ucenik = Ucenik(ime, random.randint(1, 5), random.randint(1, 5), random.randint(1, 5))
    ucenici.append(ucenik)

# Example usage:
for ucenik in ucenici:
    print(ucenik.ime, ucenik.prosjecnaOcjena())

Napisati klasu UcenikRacunarskogSmjera koja nasljedjuje klasu Ucenik i dodaje dva nova polja programiranje i bazePodataka.

class UcenikRacunarskogSmjera(Ucenik):
    def __init__(self, ime: str, mat: int, hem: int, fiz: int, bazePodataka: int, programiranje: int):
        super().__init__(ime, mat, hem, fiz)
        self.bazePodataka = bazePodataka
        self.programiranje = programiranje
    
    def prosjecnaOcjena(self) -> float:
        return (self.mat + self.hem + self.fiz + self.bazePodataka + self.programiranje) / 5

Napisati klasu Casovnik koja ima osobine sat, minut i sekund. Napisati metode resetuj(), dodajsat(), dodajMinut(), otkucaj() i stampajPodatke().

class Casovnik:
    def __init__(self):
        self.sat = 0
        self.minut = 0
        self.sekund = 0

    def resetuj(self):
        self.sat = 0
        self.minut = 0
        self.sekund = 0

    def dodaj_sat(self):
        if self.sat == 23:
            self.resetuj()
        else:
            self.sat += 1
            self.minut = 0
            self.sekund = 0

    def dodaj_minut(self):
        if self.minut == 59:
            self.dodaj_sat()
        else:
            self.minut += 1
            self.sekund = 0

    def otkucaj(self):
        if self.sekund == 59:
            self.dodaj_minut()
        else:
            self.sekund += 1

    def stampaj_podatke(self):
        print(f"{self.sat}:{self.minut}:{self.sekund}")



A = Casovnik()
A.sat = 16
A.minut = 14
A.sekund = 58

A.stampaj_podatke()
A.otkucaj()
A.otkucaj()
A.stampaj_podatke()

Isprogramirati klasu Auto. Objekti klase treba da imaju sledece atribute: model, radna zapremina, snaga, potrosnja na 100km, zapremina rezervoara, trenutna kolicina goriva u rezervoari, predjena kilometraza. Treba podrzati sledece metode: 

  • Napuni – puni rezervoar,
  • Dodaj(x) – dodaje u rezervoar x litara (ako bi nakon punjenja bio prepunjen, onda smatati da je samo napunje)
  • Predji(x) – prelazi x kilometara
  • float predjeniPut – vraca predjeni put do tog trenutka
  • float gorivo – vraca kolicinu goriva u tom trentku.
class Auto:
    def __init__(self, model, radna_zapremina, snaga, potrosnja_na_100, zapremina_rezervoara, kolicina_goriva, predjena_kilometraza):
        self.model = model
        self.radna_zapremina = radna_zapremina
        self.snaga = snaga
        self.potrosnja_na_100 = potrosnja_na_100
        self.zapremina_rezervoara = zapremina_rezervoara
        self.kolicina_goriva = kolicina_goriva
        self.predjena_kilometraza = predjena_kilometraza

    def napuni(self):
        self.kolicina_goriva = self.zapremina_rezervoara

    def dodaj(self, x):
        if self.kolicina_goriva + x > self.zapremina_rezervoara:
            self.napuni()
        else:
            self.kolicina_goriva += x

    def predji(self, x):
        self.predjena_kilometraza += x
        self.kolicina_goriva -= x * (self.potrosnja_na_100 / 100)

    def stampaj_podatke(self):
        print(self.model)
        print(self.radna_zapremina)
        print(self.snaga)
        print(self.potrosnja_na_100)
        print(self.zapremina_rezervoara)
        print(self.kolicina_goriva)
        print(self.predjena_kilometraza)

golf = Auto("golf", 1600, 70, 10.0, 70.0, 20.0, 10000.0)
    
golf.stampaj_podatke()
print()  # Empty line for spacing
    
golf.dodaj(30.0)
golf.stampaj_podatke()
print()
    
golf.predji(50)
golf.stampaj_podatke()
print()
    
golf.napuni()
golf.stampaj_podatke()

Nasljeđivanje

Klasa koja nasljeđuje naziva se podklasa, a klasa koja je naslijeđena naziva se nadklasa (superclass i subclass ili parent class i child class).

Podklasa nasljeđuje atribute i metode nadklase i može proširiti njenu funkcionalnost.

class Video:
    def __init__(self, naslov, trajanje, godina_izdanja, ocjena):
        self.naslov = naslov
        self.trajanje = trajanje
        self.godina_izdanja = godina_izdanja
        self.ocjena = ocjena

    def pusti(self):
        pass

    def pauziraj(self):
        pass


class Film(Video):
    def __init__(self, naslov, trajanje, godina_izdanja, ocjena, reditelj, budzet):
        super().__init__(naslov, trajanje, godina_izdanja, ocjena)
        self.reditelj = reditelj
        self.budzet = budzet

    def prikazi_trailer(self):
        pass


class Epizoda(Video):
    def __init__(self, naslov, trajanje, godina_izdanja, ocjena, broj_sezone, broj_epizode, naziv_serije):
        super().__init__(naslov, trajanje, godina_izdanja, ocjena)
        self.broj_sezone = broj_sezone
        self.broj_epizode = broj_epizode
        self.naziv_serije = naziv_serije


class Podcast(Video):
    def __init__(self, naslov, trajanje, godina_izdanja, ocjena, voditelj, tema, ima_transkript):
        super().__init__(naslov, trajanje, godina_izdanja, ocjena)
        self.voditelj = voditelj
        self.tema = tema
        self.ima_transkript = ima_transkript


video1 = Video("", 45, 2021, 7.5)
video2 = Video("Dokumentarac o prirodi", 90, 2019, 8.0)

film1 = Film("Terminator II", 120, 1991, 8.5, "James Cameron", 5000000)
film2 = Film("The Godfather", 95, 2020, 7.0, "Francis Ford Coppola", 2000000)

epizoda1 = Epizoda("Pilot", 42, 2023, 9.0, 1, 1, "Seinfeld")
epizoda2 = Epizoda("Episode 1", 38, 2023, 8.8, 1, 2, "Behind her eyes")

podcast1 = Podcast("Agelast 150.", 60, 2024, 8.2, "Milica Vasiljevic", "The Walking Dead review", True)
podcast2 = Podcast("Agelast 151.", 45, 2024, 7.9, "Bosko Petkovic", "It's not a sprint...", False)

print(film1.naslov)
print(podcast1.tema)