[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