[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