Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment récupérer des méthodes appelées ?

0 votes

Je m'explique :


Class Element:
def init(self, souselement):
self.sous
element = souselement
def passer
mamethode(self, methodemanquante):
self.souselement.methodemanquante()
def unevraimethode(self):
print("ok") elmt = Element()
elmt.unemethodeauhasard()
elmt.une
deuxiememethodesortiedenullpart()
elmt.une
vraimethode()

Dans l'exemple, je veux que les méthodes unemethodeauhazard et unemethodesortiedenullpart soit passé en argument à passermamethode, afin que le sous élément l’exécute.
Par contre, une
vrai_methode doit être exécuter par elmt.
Et pour ça, je pense qu'il faut que l'objet récupère les méthodes appelées.

Comment récupérer des méthodes appelées ?

demandé 22-Mar par Andy (268 points)

1 Réponse

0 votes
 
Meilleure réponse

Quelque chose ds cet esprit là devrait faire l'affaire:

class Elt(object):
    def __init__(self, elt):
        self.elt = elt

    def defined_method(self):
        print( "I'm defined")

    def __getattr__(self, name):
        return getattr(self.elt, name)



class Foo:
    def hello(self):
        print("hello world")

    def howdy(self):
        print("howdy world")

if __name__ == "__main__":
    f = Foo()
    e = Elt(f)

    e.defined_method()
    e.hello()
    e.howdy()

Tout se joue dans la methode magique __getattr__.

répondu 22-Mar par Nsukami_ (1,952 points)
sélectionné 22-Mar par Andy

getattr ne semble pas fonctionner pour des méthodes.

@Andy Heu, peut on voir plus concretement ce que tu as essayé?

Autant pour moi, ça semble fonctionner. Il se trouve que ma structure n'est pas tout à fait celle ci.
En faite ça marche dans l'exemple ci dessous mais dans mon code j'arrive pas encore à le faire marché. Je pense que j'ai besoin un peu de temps pour réfléchir.
En tout cas je valide ta réponse et j'en reposerais une si jamais je comprend pas du tout ce que je fait.

Je te montre ce que j'ai fait quand même au cas ou quelqu'un remarquerai un truc louche.


class Superieur:
def init(self):
pass class Foo2(Superieur):
def init(self):
Superieur.init(self)
def defined_method(self):
print( "I'm defined") class Elt(Superieur):
def init(self, elt):
Superieur.init(self)
self.elt = elt
def getattr(self, name):
return getattr(self.elt, name) class Foo(Elt):
def init(self, elt):
Elt.init(self, elt)
def hello(self):
print("hello world")
def howdy(self):
print("howdy world") if name == "main":
g = Foo2()
f = Foo(g)
f.hello()
f.howdy()
f.defined_method()

@Andy je t'avoue, je ne comprends pas ce que tu essaies de faire. Et sans plus de détails, je ne saurai t'aider d'avantage.

Peut être voudrais tu voir l'héritage en diamant? Pour avoir les méthodes des deux filles?

Je ne suis pas sur que ce soit l'héritage en diamant.
Je vais reposer une autre question différemment sur le forum.

...