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 &lt;<a href="mailto:feed@centrum.cz">feed@centrum.cz</a>&gt; 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>
&quot;správný Javista bude psát v každém jazyce jako v Javě&quot; (parodie na<br>
&quot;Fortranista bude psát v každém jazyce jako ve Fortranu&quot;). Osobně si<br>
myslím, že get/set metody je &quot;javovina&quot;, 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">&gt; Pokud mluvime o Pythonu, tak v něm je pozdější přepisování zdrojáků na<br>
&gt; gettery/settery přece ůplně jednoduché.<br>
&gt;<br>
&gt; Pokud se třeba v příkladu s opičkou z nějakého děsivého důvodu<br>
&gt; rozhodnu, že chci atribut nick změnit na slovník, který obsahuje dva<br>
&gt; prvky - jméno a příjmení.<br>
&gt;<br>
&gt; Stačí změnit atribut na property například takto:<br>
&gt;<br>
&gt; Výchozí stav:<br>
&gt;<br>
&gt; class Opicka:<br>
&gt; &nbsp; &nbsp; &nbsp;def __init__(self):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self._nick = &quot;&quot;<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;def magic_function(self):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.nick = self.nick.upper()<br>
&gt;<br>
&gt; Konečný stav:<br>
&gt;<br>
&gt; class Opicka:<br>
&gt; &nbsp; &nbsp; &nbsp;def __init__(self):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self._nick = {&quot;jmeno&quot;:&quot;&quot;, &quot;prijmeni&quot;:&quot;&quot;}<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;def magic_function(self):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.nick = self.nick.upper()<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;def set_nick(self, value):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value = value.split()<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self._nick[&quot;jmeno&quot;] = self._nick[&quot;prijmeni&quot;] = &quot;&quot;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if len(value) == 1:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self._nick[&quot;jmeno&quot;] = value[0]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else:<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self._nick[&quot;jmeno&quot;] = value[0]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self._nick[&quot;prijmeni&quot;] = &#39; &#39;.join(value[1:])<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;def get_nick(self):<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return(&quot;%s %s&quot; % (self._nick[&#39;jmeno&#39;], self._nick[&quot;prijmeni&quot;]))<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;nick = property(get_nick, set_nick)<br>
&gt;<br>
&gt; a = Opicka()<br>
&gt; a.nick = &quot;Pepa z Depa&quot;<br>
&gt; a.nick = a.nick + &quot; prvni&quot;<br>
&gt; print a.nick<br>
&gt; a.magic_function()<br>
&gt; print a.nick<br>
&gt;<br>
&gt;<br>
&gt; Je mi jasné, že tento příklad je docela nerealistický, ale pro<br>
&gt; demonstraci funkcionality IMHO vyhovuje.<br>
&gt;<br>
&gt; Joza<br>
&gt;<br>
&gt;<br>
&gt; 2008/6/21 Jan Bednařík &lt;<a href="mailto:jan.bednarik@gmail.com">jan.bednarik@gmail.com</a>&gt;:<br>
&gt;<br>
&gt;&gt; Souhlasím, v tomto případě jsou ty metody zbytečné. Ale v praxi často mají<br>
&gt;&gt; nějakou funkčnost navíc, jako třeba ověření/ošetření vstupních hodnot,<br>
&gt;&gt; přeformátování výstupních hodnot, vliv na další atributy třídy, logování,<br>
&gt;&gt; apod. To se bez set/get metod neobejde a když se nepoužívají už z principu i<br>
&gt;&gt; pro to jednoduché přiřazení nebo navrácení hodnoty atributu, pozdější<br>
&gt;&gt; přepisování zdrojáků není zrovna nejzábavnější.<br>
&gt;&gt;<br>
&gt;&gt; Honza<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Python mailing list<br>
&gt;&gt; <a href="mailto:Python@py.cz">Python@py.cz</a><br>
&gt;&gt; <a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<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>