簡體   English   中英

如何在Python中覆蓋函數調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM