• [^] # Re: arf

    Posté par (site web personnel) . En réponse au message Accès à la liste des méthodes de l'intérieur d'une classe. Évalué à 3.

    Si j'ai lu correctement, la méthode func est "bound"
    mu !

    En fait a1.func est liée, mais A.func ne l'est pas. On ne peut pas évoquer la méthode func sans évoquer la manière dont celle-ci a été invoquée.

    Quand on utilise im_func sur une méthode liée, python nous renvoie la fonction ( non plus la méthode ).

    >>> a1.func.im_func
    <function func at 0x7f9543c1b5f0>

    >>> A.func.im_func
    <function func at 0x7f9543c1b5f0>

    Aucune des deux n'est liée à la classe en question, c'est pourquoi on peut passer une autre instance d'un autre objet, voire même d'une autre classe :


    >>> class A(object):
    ........def __init__(self, name):
    .............self.name = name
    ........def func(self):
    .............print self.name
    ...
    >>> class B(object):
    ........def __init__(self, name):
    .............self.name = name
    ...
    >>> b1 = B(1)
    >>> A.func.im_func(b1)
    1


    C'est vraiment dommage que la doc python n'aborde pas ce point, car c'est vraiment important dès qu'on va un peu en profondeur dans le langage.

    Je n'ose même pas imaginer comment un tel découplage pourrait-être exploité...

    Pour ma part j'en avais eu besoin pour mettre en place un système d'évènement dans une appli. La difficultée étant de sauvegarder la méthode pour l'appeller lors du déclenchement de l'évenement, tout en gardant une référence faible sur l'objet auquel la méthode est liée...