[python] pspad kompilace
rajcze
rajcze na gmail.com
Sobota Červen 21 09:48:20 CEST 2008
Pokud mluvime o Pythonu, tak v něm je pozdější přepisování zdrojáků na
gettery/settery přece ůplně jednoduché.
Pokud se třeba v příkladu s opičkou z nějakého děsivého důvodu
rozhodnu, že chci atribut nick změnit na slovník, který obsahuje dva
prvky - jméno a příjmení.
Stačí změnit atribut na property například takto:
Výchozí stav:
class Opicka:
def __init__(self):
self._nick = ""
def magic_function(self):
self.nick = self.nick.upper()
Konečný stav:
class Opicka:
def __init__(self):
self._nick = {"jmeno":"", "prijmeni":""}
def magic_function(self):
self.nick = self.nick.upper()
def set_nick(self, value):
value = value.split()
self._nick["jmeno"] = self._nick["prijmeni"] = ""
if len(value) == 1:
self._nick["jmeno"] = value[0]
else:
self._nick["jmeno"] = value[0]
self._nick["prijmeni"] = ' '.join(value[1:])
def get_nick(self):
return("%s %s" % (self._nick['jmeno'], self._nick["prijmeni"]))
nick = property(get_nick, set_nick)
a = Opicka()
a.nick = "Pepa z Depa"
a.nick = a.nick + " prvni"
print a.nick
a.magic_function()
print a.nick
Je mi jasné, že tento příklad je docela nerealistický, ale pro
demonstraci funkcionality IMHO vyhovuje.
Joza
2008/6/21 Jan Bednařík <jan.bednarik na gmail.com>:
> Souhlasím, v tomto případě jsou ty metody zbytečné. Ale v praxi často mají
> nějakou funkčnost navíc, jako třeba ověření/ošetření vstupních hodnot,
> přeformátování výstupních hodnot, vliv na další atributy třídy, logování,
> apod. To se bez set/get metod neobejde a když se nepoužívají už z principu i
> pro to jednoduché přiřazení nebo navrácení hodnoty atributu, pozdější
> přepisování zdrojáků není zrovna nejzábavnější.
>
> Honza
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
--
Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.
Další informace o konferenci Python