Další metody
Oproti motivačnímu příkladu stále nemáme vyřešeno "bezpečné" čerpání dovolené. Na to se podíváme nyní. Zkusme nyní naši třídu obohatit o novou metodu - take_holiday(). Budeme hlídat i to, aby zaměstnanec/zaměstnankyně nárok na dovolenou nepřečerpal(a).
class Employee:
    def __init__(self, name, position, holiday_entitlement):
        self.name = name
        self.position = position
        self.holiday_entitlement = holiday_entitlement
    def get_info(self):
        return f"Zaměstnanec {self.name} pracuje na pozici {self.position}."
    def take_holiday(self, days):
        if self.holiday_entitlement >= days:
            self.holiday_entitlement -= days
            return f"Užij si to."
        else:
            return f"Bohužel už máš nárok jen na {self.holiday_entitlement} dní."
Nyní se podívejme, jak budou vyřizovány Františkovy žádosti o dovolenou.
frantisek = Employee("František Novák", "konstruktér", 25)
print(frantisek.take_holiday(5))
print(frantisek.take_holiday(15))
print(frantisek.take_holiday(10))
Pojďme ještě použití naší třídy trochu zjednodušit. Naše třída umí přehledně vypsat informace díky metodě get_info(). Třídu ale může používat někdo, kdo si této metody nevšimne a tak intuitivně vyzkouší funkci print().
print(frantisek)
Odpovědí bude poněkud záhadný text ve stylu
<__main__.Employee object at 0x00000126F0084850>
Funke print() se totiž pokusí převést objekt na typ řetězec. Protože naše třída nemá tuto funkci naprogramovanou, použije se standardní formát, který nám říká, že jde o objekt třídy Employee a kde je uložený v paměti (což je nám platné jako mrtvému zimník). Místo toho by bylo mnohem užitečnější získat informaci, jak ji máme připravenou v metodě get_info().
Převod na řetězec zařídíme tím, že třídě přidáme metodu __str__. Dvě lomítka opět značný zvláštní význam. Ten spočívá v tom, že Python využije tuto metodu vždy, když jej požádáme o převod objektu na řetězec. Můžeme tedy přejmenovat metodu get_info() na __str__. Výstupem našeho programu pak bude text o tom, jak se zaměstnanec jmenuje a kde pracuje.
class Employee:
    def __init__(self, name, position, holiday_entitlement):
        self.name = name
        self.position = position
        self.holiday_entitlement = holiday_entitlement
    def __str__(self):
        return f"Zaměstnanec {self.name} pracuje na pozici {self.position}."
    def take_holiday(self, days):
        if self.holiday_entitlement >= days:
            self.holiday_entitlement -= days
            return f"Užij si to."
        else:
            return f"Bohužel už máš nárok jen na {self.holiday_entitlement} dní."
frantisek = Employee("František Novák", "konstruktér", 25)
print(frantisek)
Tím jsme si ukázali, jak vytvořit třídu, objekty a jak s nimi pracovat.