2011-01-07 10 views

Antwort

5

Sie beziehen sich nur auf die Methode anstelle der Funktion. Jep. So einfach ist das. Statt

func = foo 

Sie tun

func = theobject.foo 

Fertig!

+1

Ja, es ist richtig! Es tut mir leid, weil meine Frage dumm war. Das Problem war nicht da. Ich verwende die @ static-Methode, anstatt eine Instanz zu deklarieren. Danke :-) –

+0

Was ist, wenn ich die Haupt-Parser-Optionen brauche, um 'theobject' zu konstruieren? – zhigang

+0

Erhalten Sie eine Problemumgehung: args.func .__ Aufruf __ (theobject, args). Gibt es eine bessere Lösung? – zhigang

0

Wenn Sie mit "Methode" meinen "Instanzmethode": Sie können eine Instanzmethode nicht mit Instanz aufrufen, Sie brauchen also zuerst eine Instanz. Dann können Sie nur auf obj.method beziehen und eine BoundMethod erhalten, die die Instanz erinnert (obj) - zB:

class Cls: 
    def __init__(self, x): 
     self.x = x 
    def foo(self, new_x): 
     self.x = new_x 

obj = Cls(1) 
foo = obj.foo 
foo(2) # same as obj.foo(), but we don't need to keep obj for this! 
print(obj.x) #=>2 

Wenn es eine statische ist (wenn ja, warum in 99% sind frei Funktionen einfacher zu bedienen und zu arbeiten? genauso gut) oder Klassenmethode, beziehen Sie sich einfach auf Cls.method.

1

Sie haben die richtige Antwort selbst gegeben. Einfach ausgedrückt:

func = Your_Class.your_method 

statt:

func = foo 
+0

Ja, aber "your_method" muss eine statische Methode sein (@staticmethod). –

1

Suchen Sie etwas wie folgt aus:

import argparse 

class Myclass(object): 

    def foo(self): 
     print 'foo' 

    def bar(self): 
     print 'bar' 

class Main(Myclass): 

    def __init__(self): 
     foo_parser = argparse.ArgumentParser() 

     foo_parser.add_argument('method') 
     self.args = foo_parser.parse_args() 

    def __call__(self, *args, **kws): 
     method = self.args.method 
     return getattr(self, method)(*args, **kws) 

if __name__ == "__main__": 
    main = Main() 

    main() 

Anwendungsbeispiel:

$ python test.py foo 
'foo' 
$ python test.py bar 
'bar' 
Verwandte Themen