[英]How to override a function call in Python?
我有這樣的事情:
import os
from node import Node
def make_sum(num,done):
for i in range(0,100):
num = num + 1
done(num)
def result(num):
print num
return num
node = Node()
node.register(make_sum(20,result))
result(25)
和node.py
是這樣的:
import os
class Node():
def __init__(self):
pass
def register(self,obj):
print obj
我想做的是, make_sum()
函數調用應該從register()
函數內部進行。 但是目前,它在調用register()
函數時被調用。
在python中可以做這樣的事情,在Python中您可以對函數進行前向聲明,但稍后再調用它?
您可以將make_sum
函數作為參數傳遞給register
方法:
node.register(make_sum, 20, result)
然后,在方法中調用它:
class Node():
def __init__(self):
pass
def register(self, f, num, done):
print f(num, done)
另外,您可以使用lambda
:
node.register(lambda: make_sum(20, result))
在這種情況下,您根本不需要傳遞參數:
class Node():
def __init__(self):
pass
def register(self, f):
print f()
希望這就是您想要的。
在我看來, functools.partial
是獲得所需內容的更直接的方法。
from functools import partial
node.register(partial(make_sum, 20,result))
partual(make_sum, 20, result)
一個新函數,該函數在調用時具有參數20
和自動添加的result
。
它支持*
和**
以及命名參數:
loud_printer = partial(print, *(1, 2, 3), end="")
loud_printer
#>>> functools.partial(<built-in function print>, 1, 2, 3, end='')
loud_printer()
#>>> 1 2 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.