Python, ca tue

Récemment, je me plaignais de ne pas trouver de langage class-based qui supporte une sorte d’héritate de propriétés statiques.

Et bien j’en ai trouvé un. C’est un peu embarassant dans la mesure où je considérais avoir jeté un bon coup d’oeil à python.
Et bien j’avais tort.
J’ai raté cette fonctionalité, qui n’est pas une paille et certainement beaucoup d’autres encore. La vérité, c’est que lire la doc officielle et écrire un ou deux projets « Hello World » ne suffit pas à apréhender un langage ; il faut pour cela commencer à réellement travailler avec.

Ceci-dit, voici donc un exemple de code :

# module test
class A(object):
    @classmethod
    def methodA(cls):
        print "I am method A, called from %s" % cls
 
class B(A):
    pass
 
# from python shell
>>> from test import A, B
>>> A.methodA()
I am method A, called from <class 'A'>
>>> B.methodA()
I am method A, called from <class 'B'>

La manière dont la chose est implémentée peut paraître surprenante au départ mais prend sens si l’on y réfléchit en parallèle de son histoire (il fallait en python 2.2 écrire method = classmethod(method)).

Python permet aussi bien sûr de définir des méthodes statiques « normales » à l’aide du décorateur @staticmethod

  1. Aucun commentaire pour l'instant

  1. Aucun trackback pour l'instant