9
votes

Ajouter la méthode à une classe de manière dynamique avec décorateur

J'aurais ajouter une méthode à un Classe dynamiquement ... Le nom de la fonction sera également passé de manière dynamique.

Comment puis-je faire? J'ai essayé de cette façon xxx

mais si je le fais: xxx

J'ai xxx

au lieu de var : .....

J'ai cette classe: xxx

J'appellerais: xxx

et avez le dos auto.dimension mais je ne sais pas nom à l'avance


2 commentaires

Afficher un exemple du code que vous espérez utiliser pour attacher la méthode à la classe. Je n'ai aucune idée de la manière dont vous pourriez avoir une méthode que vous souhaitez attacher, mais que vous n'avez aucune sorte de nom pour cela. Je n'ai pas non plus aucune idée de la manière dont vous vous attendez à ce que la méthode ait logique d'être attachée à la classe, si la classe n'a pas été conçue avec cette méthode en premier lieu.


Années plus tard, mais montrant une bonne et simple solution: MOYENCH.COM/@MGAROD/...


4 Réponses :


17
votes

Ceci est mon décorateur xxx

ceci est un exemple de méthode xxx

ceci est une classe décorée Xxx

J'espère que cela est utile et ce dont vous avez besoin :)


0 commentaires

0
votes
def __init__(self):
    cls.c += 1  # +1 to CLS, not self!
    cls.__init__

0 commentaires

5
votes

Voici une solution PY3 simplifiée

class A(object):
    def a(self):
        print('a')

def add_b(cls):
    def b(self):
        print('b')

    setattr(cls, 'b', b)
    return cls

@add_b
class C(A):
    pass

C().b() # 'b'


1 commentaires

C'est la plus élégante de toutes les solutions ici



1
votes
class Foo:
    pass

@add_method(Foo)
def bar(self, parameter1):
    pass # Do something where self is a class instance

0 commentaires