Následuje můj kód třídy zt (jako zkušební třída):
(pod kódem jsou má přání a dotazy)
class zt:
"""
Trida zt slouzi jen jako obetni beranek pro psi kusy.
"""
_data = 0
def __init__(self):
"""
vstup: neni
vystup: None
--
Metoda __init__ inicializuje tridu zt. Mimo to nedela nic.
"""
pass
@property
def _data(self):
"""
Metoda data.getter vraci hodnotu promenne >_data< .
"""
vystup = self._data
return vystup
@_data.setter
def _data(self, nova_data):
"""
Metoda data.setter uklada retezec >nova_data< do promenne >self._data<
"""
assert type(nova_data) == int, "data.setter: neplatny vstup"
self._data = nova_data
Asi jste našli něco, co je tam špatně. Protože to fakt nefunguje. Já se učím pracovat s dekorátory. Zhruba jsem pochopil, že dekorátor je fce, která si jako svůj argument bere jinou fci, kterou nějakým způsobem pozměňuje. Z mého pohledu fce property vrací nějakou proměnnou (tady jsou to _data) .
1. DOTAZ: Nevěřím, že property dělá jenom tohle. Určitě nabízí něco víc. Co vlastně dělá? V čem je tak dobrá?
Dočetl jsem se, že každý atribut má tři vlastnosti:
getter (tuhle vlastnost by měla zastupovat fce property.... je to tak?)
setter
deleter
U dekorátoru @_data.setter vidím už smysl v tom, že do něj můžu přidat nějaké omezení jako je ten můj assert. To už je něco navíc, to už se mi líbí, že vidím něco, čím to původní opravdu měním. No ale taky vidím, že to nefunguje. Zkoušel jsem tohle:
zt._data = "a"
a čekal jsem, že se vyvolá AssertionError, ale nevyvolal se.
2. DOTAZ: V čem dělám chyby?
Učím se z knihy Python 3 - Výukový kurz .... ty dekorátory mě žerou teda. Prosím poraďte mi.