Štábní kultura a třídy
Lekce 12
Úlohy
Spojový seznam (5b)
V GitLabu ve složce této lekce naleznete soubor linked.py
.
Ten obsahuje vlastní implmentaci jednosměrného spojového
seznamu. Některé metody ale programátor zapomněl doimplementovat.
Příslušné nenaimplementované metody (označené TODO komentářem)
naimplementujte.
Zkrášlení repozitáře (2b)
Na dnešní hodině jsme se dozvěděli o určitých konvencích, jak by náš kód měl vypadat. Také jsme si stanovili, jak by asi bylo vhodné členit náš repozitář, aby se v něm vyznal každý.
Aplikujte tyto konvence na váš repozitář.
Co jsme dnes probrali
Štábní kultura
- PEP, konvence, jak by měl kód v Pythonu vypadat.
- Nainstalovali jsme si nové extensions do VS Code
- Pylint je věc, co vám podtrhává to, co je špatně (chyby, varování, doporučení)
- Black formatter vám kód hezky zarovnává a formátuje
- Nepoužívat Unicode znaky v názvech souborů a proměnných; pouze v komentářích a dokumentačních řetězcích
- V názvech souborů nepoužívat ani mezery
Třídy
- Třídy nám umožňují vzít několik souvisejících proměnných a zabalit je do jednoho typu.
- Například můžeme vytvořit třídu
Person
pro reprezentaci osob.- Taková třída by mohla mít dvě proměnné (v kontextu tříd nazývané položky): jméno a datum narození.
- Třída je pouze šablona, která popisuje, jak vypadá osoba.
- Konkrétní osoby pak reprezentují instance třídy (také objekty).
- Každý objekt má své vlastní hodnoty položek. Nastavíme je při vytváření objektu, pak je můžeme číst a měnit, přistupujeme k nim pomocí tečky.
- Máme-li konkrétní osobu v proměnné
p1
, její položky jsoup1.name
ap1.date_of_birth
.
- Máme-li konkrétní osobu v proměnné
- ukázka
- Kromě položek může mít třída i své vlastní funkce, nazývané metody.
- Metody jsou funkce, které přistupují k položkám objektu.
- Definují se uvnitř třídy. Stejné funkce by šlo definovat i mimo třídu, objekt by dostávaly jako argument.
- Jsou-li definované uvnitř třídy, pak volání
p1.f()
zavolá funkcif(p1)
, tedy automaticky předá objekt jako první argument. - V Pythonu se první argument konvenčně pojmenovává
self
.
- Složitější příklad: spojový seznam
- Některé položky a metody začínají
_
. To značí, že jsou privátní.- Měly by být používány jen uvnitř třídy, zajišťují implementační detaily.
- Představte si, že pracujete ve vícečlenném týmu. Každý vývojář napíše jednu třídu, kterou potom použijí ostatní.
- Třída má nějaké veřejné rozhraní, tedy metody a položky, které jsou určeny k použití zvenčí.
- Implementace veřejných metod může používat privátní metody a položky, které by neměly být změněny zvenčí.
- Příkladem je
_len
, tedy délka seznamu. Nechceme povolit, aby tuto hodnotu někdo zvenčí jen tak změnil. - Proto nabízíme veřejnou metodu
__len__
, která délku vrátí, ale neumožňuje ji změnit.
- Metody začínající a končící dvěma podtržítky jsou speciální, Python jim dává další význam.
__init__
je volána, když se vytvoří nový objekt.__len__
se použije, pokud objekt předáme jako argument vestavěné funkcelen
.
- Některé položky a metody začínají