[python] pspad kompilace

Jan Bednak jan.bednarik na gmail.com
Nedle erven 22 20:19:35 CEST 2008


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í.

Honza


Dne 21. červen 2008 9:55 superman <feed na centrum.cz> napsal(a):

> Děkuji náčelníku, že jsi se mě zastal :-) Já osobně si myslím, že
> get/set metody v Pythonu je absolutní pitomost, a že to tak krásný a
> schopný jazyk, jakým Python je opravdu nemá zapotřebí. Nevidím jedinou
> výhodu používání get/set metod v Pythonu - ani jedinou, kromě toho že
> "správný Javista bude psát v každém jazyce jako v Javě" (parodie na
> "Fortranista bude psát v každém jazyce jako ve Fortranu"). Osobně si
> myslím, že get/set metody je "javovina", kde v Javě je bohužel nutné
> díky strašné neschopnosti syntaxe Javy používat lecjakou obezličku, ale
> je to z nouze ctnost.
>
> Miloslav Ponkrác
>
> rajcze napsal(a):
> > 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
> >>
> >>
> >
> >
> >
> >
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- dal st ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20080622/faf7cde8/attachment.htm 


Dal informace o konferenci Python