[python] "virtualni metody" a lenost programatora
Jan Kundrát
jkt na gentoo.org
Neděle Leden 28 22:40:54 CET 2007
Ahoj,
klasicky pripad na polymorfismus :). Mam neco, cemu rikam "stream", coz
je objekt, co umi read(), write(), readline(), flush() a tak. Zbytek
programu nezajima, jakej konkretni stream pouziva, ale jenom to, ze to
"je stream". V jinych jazycich bych to resil dedenim od jednoho
spolecneho potomka, to v pythonu nemusim (duck typing, ze jo).
Nicmene jsem liny clovek a tak nechci u kazde metody v kazde odvozene
tride znova nastavovat docstring. Udelal jsem to teda takhle:
class Generic:
def foo(args):
"bla bla"
return self._foo(args)
def bar(a, b, c):
"bla bla blabla"
return self._bar(a, b, c)
def __empty(args)
raise NotImplementedError
_foo = __empty
_bar = __empty
class Normalni(Generic):
def _foo(args):
kod()
Cili mam nejakou obalku kolem kazde funkce, kterou potrebuju, a z ni
teprve volam tu potrebnou. Prijde mi to ale jako celkem prasarna. Na
druhou stranu, rozhodne nechci u kazde z peti trid "Normalni" porad
opakovat docstring z Generic...
Real-world kod je na [1].
[1]
http://svn.flaska.net/viewcvs/*checkout*/trojita/trunk/streams.py?rev=114&content-type=text%2Fplain
Hezky vecer,
-jkt
--
cd /local/pub && more beer > /dev/mouth
Další informace o konferenci Python