[python] Přetížení třídní metody
Radek Kanovsky
rk na dat.cz
Čtvrtek Květen 5 09:52:23 CEST 2005
On Wed, May 04, 2005 at 07:12:49PM +0000, Jaroslav Aster wrote:
> Dobrý den,
>
> chtěl bych se zeptat, zda jde v Pythonu nějak přetížit třídní metoda.
> Tj. něco takovédleho (což nefunguje):
>
> def xmlToNative(self, xmlFileName):
> print "objectmethod"
>
> @classmethod
> def xmlToNative(cls, profile, xmlFileName):
> print "classmethod"
>
> Změna názvu metody je jasná, ale to právě nechci. Za případnou radu
> děkuji.
Nevím, proč to přesně potřebujete, ale možná tohle pomůže:
from new import instancemethod
class clsobjmethod(object):
def __init__(self, clsmethod, objmethod):
self.clsmethod = clsmethod
self.objmethod = objmethod
def __get__(self, obj, typ=None):
if obj is None:
return instancemethod(self.clsmethod,typ,typ)
else:
return instancemethod(self.objmethod,obj,typ)
class Klass(object):
def _xmlToNativeObj(self, xmlFileName):
print 'called from object', self, xmlFileName
def _xmlToNativeCls(cls, profile, xmlFileName):
print 'called from class', cls, profile, xmlFileName
xmlToNative = clsobjmethod(_xmlToNativeCls, _xmlToNativeObj)
Klass.xmlToNative('prof', 'file')
klass = Klass()
klass.xmlToNative('file')
Zdraví
Radek Kaňovský
Další informace o konferenci Python