我上课。该类具有要由其他程序评估的功能的列表。
class SomeClass(object):
def __init__(self, context):
self.functions_to_evaluate = []
有一个函数可以通过以下方式将函数添加到SomeClass的实例中:
new_function = check_number(5)
SomeClassInstance.functions_to_evaluate.append(new_function)
假设check_number是一个函数,它将检查数字是否大于10。
如果我将SomeClassInstance.functions_to_evaluate并打印出来,我会得到一堆python对象,就像这样:
<some_library.check_number object at 0x07B35B90>
我想知道是否有可能提取给check_number的输入,所以像这样:
SomeClassInstance.functions_to_evaluate [0] .python_feature()将会返回“ 5”或任何给我的check_number输入。
答案 0 :(得分:4)
您可以使用标准库functools.partial,该库创建一个新的部分应用的函数*。
if(GetComponent<YourComponent>.isDrag) // ....
*:实际上>>> from functools import partial
>>> def check_number(input):
... return input > 10
>>> fn = partial(check_number, 5)
>>> fn.args # this attribute gives you back the bound arguments, as a tuple.
(5,)
>>> fn() # calls the function with the bound arguments.
False
对象不是partial
实例,但它是可调用的,从鸭子类型的角度来看,它是一个函数。
答案 1 :(得分:1)
如果new_function = check_number(5)
是闭包,则可以使用__closure__[0].cell_contents
提取该值:
示例:
def foo(x):
def inn(y):
return x
return inn
s = foo(5)
print(s.__closure__[0].cell_contents)
输出:
5
答案 2 :(得分:1)
我了解您的困惑,但是:
new_function = check_number(5)
正在调用该函数,并且为new_function
变量分配了该函数的返回值。
如果您具有此check_number
功能:
def check_number(input):
return input > 10
然后它将返回False
,而new_function
将是False
。永远不要<some_library.check_number object at 0x07B35B90>
。
如果您获得<some_library.check_number object at 0x07B35B90>
,则您的check_number()
函数将返回其他内容。
答案 3 :(得分:1)
可能有几种方法可以给这只猫蒙皮。但是我首先要注意的是,您没有将{em> python函数对象添加到functions_to_evaluate
列表中,而是添加了对 函数的评估。 / p>
您只需在列表中添加tuple
中的function, args
:
SomeClassInstace.functions_to_evaluate.append((check_number, 5))
然后您可以:
for f, args in SomeClassInstance.functions_to_evaluate:
print(args)