2017-11-28 1 views
-7

Zum Beispiel möchte ich in der Lage sein, ein Verhalten zu injizieren, wenn ich in einer Funktion will, aber wenn ich nicht ein Verhalten haben will ich esWie mache ich Funktionsargumente optional?

class TestDefaultParam: 
    def defaultBehavior(file1, file2): 
     return 2 

    def action(file1, file2, behave=defaultBehavior): 
     return behave(file1, file2) 

if __name__ == '__main__': 
    some = TestDefaultParam() 
    print(some.action("test", "test")) 

Wenn dies isn ein Standardverhalten haben Wie kann ich das Handlungsverhalten beliebig verändern?

mit diesem Code bekomme ich diesen Fehler:

Traceback (most recent call last): 
    File ".\test.py", line 10, in <module> 
    print(some.action("test", "test")) 
    File ".\test.py", line 6, in action 
    return behave(file1, file2) 
    TypeError: 'str' object is not callable 
+2

Was stimmt nicht mit dem, was Sie bereits haben? – user2357112

+0

warum als "oop" markiert? – haifzhan

+2

Zeigen Sie die vollständige Traceback und wo Sie "Aktion" genannt. Was hast du 'benehmen =' gesetzt? Ein Faden? –

Antwort

1

Vielleicht wird this helfen. In Ihrem Fall

def action(file1, file2, behavior=defaultBehavior): 
    return behave(file1, file2) 

ist in Ordnung. Aber natürlich, wenn ein Argument in den Parameter "benehmen" übergeben wird, sollten Sie in Ihrer Funktion darauf achten. wenn Sie angerufen Zum Beispiel

action("somefile", "anotherfile", customBehavior) 

dann werden Sie so etwas wie die folgenden beschäftigen sie wollen:

def action(file1, file2, behavior=defaultBehavior): 

    if behave != defaultBehavior: # this means that behavior was set to something 
     behave(file1, file2, behavior) 
    else: # in this case, behave == defaultBehavior 
     behave(file1, file2) 

Etwas Ähnliches kann für behave() konstruiert werden.

Verwandte Themen