请考虑以下代码:
ff = lambda x : x
gg = lambda x : x*2
class FunctionCollection(object):
f = ff
g = gg
def FunctionCaller(x, Type = FunctionCollection.f):
return Type(x)
y = FunctionCaller(x)
返回
必须使用FunctionCollection实例作为第一个参数调用unbound method()(改为使用ndarray实例)
我不明白的消息。 一个明显的解决方案是定义ff和gg INSIDE FunctionCollection,但我想知道是否不可能在模块中定义ff和gg,然后创建一个包含"指针"对那些功能,最后传递那些"指针"作为参数。抱歉,C风格的命名。
这有什么不对?
谢谢,
麦克
答案 0 :(得分:1)
您的代码实际上 在python3.x上运行。如果需要支持python2.x,可以使用staticmethod:
ff = lambda x : x
gg = lambda x : x*2
class FunctionCollection(object):
f = staticmethod(ff)
g = staticmethod(gg)
def FunctionCaller(x, Type = FunctionCollection.f):
return Type(x)
y = FunctionCaller(1.0)
print(y)
另一个选择是使用FunctionCollection
作为“单例”并将函数绑定到单个实例...
ff = lambda x : x
gg = lambda x : x*2
class FunctionCollection(object):
pass
FUNC_COLLECTION = FunctionCollection()
FUNC_COLLECTION.f = ff
FUNC_COLLECTION.g = gg
def FunctionCaller(x, Type = FUNC_COLLECTION.f):
return Type(x)
y = FunctionCaller(1.0)
print(y)
我想知道是否无法在模块中定义ff和gg,然后创建一个包含这些函数的“指针”的枚举,最后将这些“指针”作为参数传递。
我认为这引出了一个明显的问题......为什么你需要这种额外的间接水平?我似乎没必要 1 。
1 当然不是说它 是不必要的 - 只是因为我还不明白目的......