例如,我希望能够在函数内部注入行为,但如果我没有行为,我希望它具有默认行为
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"))
如果这不可能,我怎么能随意改变行动的行为?
使用此代码我收到此错误:
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
答案 0 :(得分:1)
也许this会有所帮助。在你的情况下,
def action(file1, file2, behavior=defaultBehavior):
return behave(file1, file2)
没关系。但是,当然,如果将参数传递给“behave”参数,您应该在函数中处理它。例如,如果你打电话
action("somefile", "anotherfile", customBehavior)
然后你会想要类似下面的东西来处理它:
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)
可以为behave()
构建类似的东西。