Tak o existenci property jsem neměl tušení. Nyní souhlasím, že set/get metody nemají v Pythonu co dělat. Díky za rozšíření znalostí.<br><br>Honza<br><br><br><div class="gmail_quote">Dne 21. červen 2008 9:55 superman <<a href="mailto:feed@centrum.cz">feed@centrum.cz</a>> napsal(a):<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Děkuji náčelníku, že jsi se mě zastal :-) Já osobně si myslím, že<br>
get/set metody v Pythonu je absolutní pitomost, a že to tak krásný a<br>
schopný jazyk, jakým Python je opravdu nemá zapotřebí. Nevidím jedinou<br>
výhodu používání get/set metod v Pythonu - ani jedinou, kromě toho že<br>
"správný Javista bude psát v každém jazyce jako v Javě" (parodie na<br>
"Fortranista bude psát v každém jazyce jako ve Fortranu"). Osobně si<br>
myslím, že get/set metody je "javovina", kde v Javě je bohužel nutné<br>
díky strašné neschopnosti syntaxe Javy používat lecjakou obezličku, ale<br>
je to z nouze ctnost.<br>
<br>
Miloslav Ponkrác<br>
<br>
rajcze napsal(a):<br>
<div><div></div><div class="Wj3C7c">> Pokud mluvime o Pythonu, tak v něm je pozdější přepisování zdrojáků na<br>
> gettery/settery přece ůplně jednoduché.<br>
><br>
> Pokud se třeba v příkladu s opičkou z nějakého děsivého důvodu<br>
> rozhodnu, že chci atribut nick změnit na slovník, který obsahuje dva<br>
> prvky - jméno a příjmení.<br>
><br>
> Stačí změnit atribut na property například takto:<br>
><br>
> Výchozí stav:<br>
><br>
> class Opicka:<br>
> def __init__(self):<br>
> self._nick = ""<br>
><br>
> def magic_function(self):<br>
> self.nick = self.nick.upper()<br>
><br>
> Konečný stav:<br>
><br>
> class Opicka:<br>
> def __init__(self):<br>
> self._nick = {"jmeno":"", "prijmeni":""}<br>
><br>
> def magic_function(self):<br>
> self.nick = self.nick.upper()<br>
><br>
> def set_nick(self, value):<br>
> value = value.split()<br>
> self._nick["jmeno"] = self._nick["prijmeni"] = ""<br>
> if len(value) == 1:<br>
> self._nick["jmeno"] = value[0]<br>
> else:<br>
> self._nick["jmeno"] = value[0]<br>
> self._nick["prijmeni"] = ' '.join(value[1:])<br>
><br>
> def get_nick(self):<br>
> return("%s %s" % (self._nick['jmeno'], self._nick["prijmeni"]))<br>
><br>
> nick = property(get_nick, set_nick)<br>
><br>
> a = Opicka()<br>
> a.nick = "Pepa z Depa"<br>
> a.nick = a.nick + " prvni"<br>
> print a.nick<br>
> a.magic_function()<br>
> print a.nick<br>
><br>
><br>
> Je mi jasné, že tento příklad je docela nerealistický, ale pro<br>
> demonstraci funkcionality IMHO vyhovuje.<br>
><br>
> Joza<br>
><br>
><br>
> 2008/6/21 Jan Bednařík <<a href="mailto:jan.bednarik@gmail.com">jan.bednarik@gmail.com</a>>:<br>
><br>
>> Souhlasím, v tomto případě jsou ty metody zbytečné. Ale v praxi často mají<br>
>> nějakou funkčnost navíc, jako třeba ověření/ošetření vstupních hodnot,<br>
>> přeformátování výstupních hodnot, vliv na další atributy třídy, logování,<br>
>> apod. To se bez set/get metod neobejde a když se nepoužívají už z principu i<br>
>> pro to jednoduché přiřazení nebo navrácení hodnoty atributu, pozdější<br>
>> přepisování zdrojáků není zrovna nejzábavnější.<br>
>><br>
>> Honza<br>
>><br>
>> _______________________________________________<br>
>> Python mailing list<br>
>> <a href="mailto:Python@py.cz">Python@py.cz</a><br>
>> <a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
>><br>
>><br>
><br>
><br>
><br>
><br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br>