2009-04-01 7 views

Répondre

124

Oui, il suffit d'utiliser le nom de la méthode, comme vous l'avez écrit. Les méthodes/fonctions sont des objets dans Python, comme n'importe quoi d'autre, et vous pouvez les passer comme vous le feriez avec des variables. En fait, vous pouvez considérer une méthode (ou une fonction) comme une variable dont la valeur est l'objet de code réellement appelable.

Pour votre information, il n'y a pas de méthode call - Je pense que ce qu'on appelle __call__, mais vous ne devez pas l'invoquer explicitement:

def method1(): 
    return 'hello world' 

def method2(methodToRun): 
    result = methodToRun() 
    return result 

method2(method1) 
+1

Wow, étonnamment simple. –

+1

@MattFletcher La simplicité de Python m'étonne toujours (venant de C++). – GHC

+0

@David Z comment puis-je passer des arguments dans la méthode 1? – Geek

22

Oui, il est possible. Il suffit de l'appeler:

class Foo(object): 
    def method1(self): 
     pass 
    def method2(self, method): 
     return method() 

foo = Foo() 
foo.method2(foo.method1) 
+1

et s'il n'y a pas d'instance 'foo'? Ensuite, vous –

+0

tout simplement pas besoin foo, ' .: par exemple def method1(): passe def method2 (méthode) méthode de retour() method2 (method1)' – Tom

5

Oui; fonctions (et méthodes) sont des objets de première classe en Python. Les travaux suivants:

def foo(f): 
    print "Running parameter f()." 
    f() 

def bar(): 
    print "In bar()." 

foo(bar) 

Sorties:

Running parameter f(). 
In bar(). 

Ces sortes de questions sont très simples à répondre en utilisant l'interpréteur Python ou, pour plus de fonctionnalités, la coquille IPython.

10

Voici votre exemple réécrits pour montrer un exemple de travail autonome:

class Test: 
    def method1(self): 
     return 'hello world' 

    def method2(self, methodToRun): 
     result = methodToRun() 
     return result 

    def method3(self): 
     return self.method2(self.method1) 

test = Test() 

print test.method3() 
2

méthodes sont des objets comme les autres. Vous pouvez donc les faire circuler, les stocker dans des listes et des dictionnaires, faire ce que vous voulez avec eux. La chose spéciale à leur sujet est qu'ils sont des objets appelables de sorte que vous pouvez invoquer __call__ sur eux. __call__ est appelée automatiquement lorsque vous invoquez la méthode avec ou sans arguments. Il vous suffit donc d'écrire methodToRun().

Questions connexes