[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