[Python] @classmethod ed ereditarietà

Pietro Battiston me a pietrobattiston.it
Ven 4 Gen 2013 15:54:41 CET


Salve a tutti,

ho da poco scoperto "classmethod", e mi stanno parecchio simpatico. Ho
peṛ trovato un piccolo ostacolo riguardo all'ereditarietà. Per i metodi
"normali", posso fare il classico:

class Base(object):
    def fai_qualcosa(self):
        ...
        return result

class Derivata(Base):
    def fai_qualcosa(self):
        primo_passo = Base.fai_qualcosa( self )
        ...
        return result


Ma per i classmethod non trovo qualcosa di ugualmente comodo ed
elegante, nel senso che

class Base(object):
    @classmethod
    def fai_qualcosa(cls):
        ...
        return result

class Derivata(Base):
    @classmethod
    def fai_qualcosa(cls):
        primo_passo = Base.fai_qualcosa( cls )
        ...
        return result


chiaramente protesta ("Base.fai_qualcosa" prende un solo argomento, che
è per l'appunto sempre "Base"). Quindi l'unica alternativa che mi viene
in mente è dare a "fai_qualcosa" un argomento opzionale "cls_effettiva".
C'è qualcosa di meglio che mi sfugge?

grazie, ciao

Pietro



Maggiori informazioni sulla lista Python