2011-10-07 6 views
1

Je cherche à appeler une méthode en python d'une autre classe comme ceci:appel d'une méthode de classe en python

class foo(): 
    def bar(name): 
     return 'hello %s' % name 

def hello(name): 
    a = foo().bar(name) 
    return a 

Où bonjour (« monde ») retournerait « Bonjour tout le monde ». Je sais que j'ai fait quelque chose de mal ici, est-ce que quelqu'un sait ce que c'est? Je pense que c'est peut-être la façon dont je gère les cours mais je n'ai pas encore compris.

+0

J'utilise Python 2.7, je pense qu'il ya une syntaxe erronée dans votre code, – lostyzd

+0

Nous sommes sur 2,5, pas un problème de syntaxe c'était le problème de "soi" comme répondu environ 4 fois ci-dessous;) –

Répondre

6

En Python, les méthodes non statiques prennent explicitement self comme premier argument.

foo.bar() soit doit être une méthode statique:

class foo(): 
    @staticmethod 
    def bar(name): 
     return 'hello %s' % name 

ou doit prendre self comme premier argument:

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 

Ce qui se passe est que, dans votre code, name est interprété comme le paramètre self (qui vient d'être appelé autre chose). Lorsque vous appelez foo().bar(name), Python essaie de passer deux arguments (self et name) à foo.bar(), mais la méthode n'en prend qu'un.

+0

Merci, je n'ai fait que du python minime dans le passé! Merci quand même. –

3

Il vous manque le paramètre d'instance dans la définition de la méthode:

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 

ou si vous ne comptez pas utiliser une partie de l'instance foo déclarer la méthode comme une méthode statique. Il y a une bonne explication entre les différences here.

3

Si c'est supposé être une méthode de classe, alors vous devriez avoir utilisé le décorateur classmethod et un argument cls à bar. Mais cela n'a aucun sens dans ce cas, donc vous auriez pu vouloir un staticmethod à la place.

+3

Et un 'classmethod' a comme premier paramètre la classe (habituellement appelée' cls'), donc vous devrez l'ajouter aussi. – delnan

3

Vous avez manqué le paramètre d'instance, habituellement appelé self:

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 
Questions connexes