如何在Python中覆盖函数调用?

时间:2013-09-26 10:59:34

标签: python method-overriding overrides function-overriding

我有这样的事情:

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中执行此操作,您可以在其中执行函数的前向声明但稍后调用它?

2 个答案:

答案 0 :(得分:2)

您可以将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()

希望这是你想要的。

答案 1 :(得分:1)

在我看来,functools.partial是获得所需内容的更直接方式;

from functools import partial

node.register(partial(make_sum, 20,result))

partual(make_sum, 20, result)创建一个新函数,在调用时,会自动添加参数20result

它支持***以及namd参数:

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