Třídy z lekce které budeme rozšiřovat:
class Zamestnanec:
def __init__(self, jmeno, pozice):
self.jmeno = jmeno
self.pozice = pozice
self.dovolena = 160
def cerpej_dovolenou(self, pocet_hodin):
if self.dovolena >= pocet_hodin:
self.dovolena -= pocet_hodin
return "Užij si to."
else:
return f"Máš nárok je na {self.dovolena} hodin."
def __str__(self):
return f"Zam. {self.jmeno} a pracuje na poz. {self.pozice}"
class Manazer(Zamestnanec):
def __init__(self, jmeno, pozice, pocet_podrizenych):
super().__init__(jmeno, pozice)
self.pocet_podrizenych = pocet_podrizenych
def __str__(self):
return super().__str__() + f" - Počet podřízených: {self.pocet_podrizenych}"
# ------------------------------
class Balik:
def __init__(self, adresa, hmotnost):
self.adresa = adresa
self.hmotnost = hmotnost
self.dorucen = False
def dorucit(self):
self.dorucen = True
def __str__(self):
return f'Balik na adresu {self.adresa}, hmotnost {self.hmotnost}'\
f' - {"doručen" if self.dorucen else "nedoručen"}'
Naše firma se rozhodla zaměstnávat i pracovníky na částečné úvazky, pro které bude vytvořena zvláštní třída. Vytvoř
novou třídu Brigadnik
, která bude dědit od třídy Zamestnanec
a bude mít navíc atribut uvazek
, který reprezentuje
velikost úvazku oproti plnému. Přidej informaci o úvazku k výpisu informací do funkce __str__()
.
class Brigadnik(Zamestnanec):
def __init__(self, jmeno, pozice, uvazek):
super().__init__(jmeno, pozice)
self.uvazek = uvazek
def __str__(self):
return super().__str__() + f' velikost uvazku: {self.uvazek}'
Pokračuj ve své práci pro zásilkovou společnost.
Společnost nově doručuje i cenné balíky, které mají zadanou určitou hodnotu. Vytvoř třídu CennyBalik
, která dědí od
třídy Balik
. CennyBalik
má navíc atribut hodnota
, ostatní atributy dědí od třídy Balik
. Atribut hodnota
nastav
pomocí funkce __init__
. Ostatní parametry předej funkci __init__
třídy Balik
. Vytvoř si alespoň jeden objekt a
zkus volání jeho funkcí.
class CennyBalik(Balik):
def __init__(self, adresa, hmotnost, hodnota):
super().__init__(adresa, hmotnost)
self.hodnota = hodnota
def __str__(self):
return super().__str__() + f' - hodnota: {self.hodnota}'
b1 = CennyBalik('Pepa - Praha 10', 10, 200)
b1.dorucit()
print(b1)
Pokračuj ve své práci pro zásilkovou společnost. Společnost nyní eviduje jednotlivé řidiče a eviduje balíky, které má každý řidič doručit.
- Vytvoř třídu
Ridic
, která má dva atributy:jmeno
(jméno řidiče) aseznam_baliku
(seznam balíků k doručení, na začátku je prázdný). - Přidej třídě metodu
prirad_balik
, která bude mít jeden parametr -balik
(balík k doručení, může se jednat i o cenný balík). Funkce nejprve zkontroluje, zda balík již nebyl doručen. Pokud ano, vypíše funkce text: "Nelze přiřadit, balík již byl doručen." Pokud balík ještě nebyl doručen, je přidán do seznamu balíkůseznam_baliku
(použij funkciappend
). - U řidiče chceme sledovat, kolik by měl ještě doručit balíků. Napiš funkci
zbyva_baliku
, která vrátí počet balíků, které má řidič přiřazené a ještě je nedoručil.
class Ridic:
def __init__(self, jmeno, seznam_baliku=None):
self.jmeno = jmeno
# osetruje priprad "mutable default argument"
self.seznam_baliku = seznam_baliku or []
def prirad_balik(self, balik):
if balik.dorucen:
print('Nelze přiřadit, balík již byl doručen.')
else:
self.seznam_baliku.append(balik)
def zbyva_baliku(self):
"""Vrať počet balíků, které ejště nejsou doručnené.
Výpočet využívá toho, že bool hodnoty True a False v proměnné balik.dorucen
se v metodě sum budou chovat jako 1 a 0.
"""
return sum(not balik.dorucen for balik in self.seznam_baliku)
b1 = CennyBalik('Pepa - Praha 10', 10, 200)
b2 = CennyBalik('Anna - Praha 1', 12, 50)
b3 = Balik('Josef - Plzeň', 5)
b4 = Balik('Tereza - Olomouc', 7)
b1.dorucit()
b3.dorucit()
r = Ridic('Karel', seznam_baliku=[b1, b2])
r.prirad_balik(b3) # nepůjde. již byl doručen
r.prirad_balik(b4)
print(f'Zbývá doručit {r.zbyva_baliku()} balíků.')