所以人们经常忘记(或从不知道)的一件事是函数也具有属性并且它们是完全可变的。所以你可以这样做:
def LoadMyDLL():
dll = ctypes.CDLL("libmydll.so")
dll.HelperFunction = HelperFunction
dll.HelperFunction.dll = dll
return dll
但这会产生一个问题:dll.HelperFunction.dll is HelperFunction.dll
. 因此,无论您最后一次调用LoadMyDLL
是什么,都将CDLL
是附加到HelperFunction
. 如果您没有在上下文之外使用 HelperFunction,dll.HelperFunction()
那么我建议您执行以下操作:不要创建HelperFunc
的属性dll
,只需HelperFunction(dll)
在需要的地方调用。如果你想修改它,dll
因为 Python 是通过引用传递的,它会这样做。如果您不相信我并希望我发布示例代码,我很乐意用插图对其进行编辑。
免责声明一般来说,你似乎在做的事情对我来说根本不正确。如果您想做这样的事情,我建议创建一个将CDLL
对象存储为的类self.dll
并HelperFunction
在该类上创建一个方法。然后您可以self.dll
从该方法访问。当然,设计是你的决定,我看不到其余的代码,但后者对我来说似乎更自然(我猜对很多其他人来说也是如此)。
编辑只是由于下面的讨论,我想就如何考虑构建我建议的类提供一个想法(即使上述内容被接受)。
class DLLHelper(object):
def __init__(self, static_object=None, helper_function=None):
self.dll = ctypes.CDLL(static_object or "libmydll.so")
def HelperFunction(self):
# do stuff with self.dll
def OtherRelatedFunction(self):
# do stuff with self.dll and self.HelperFunction
dll = DLLHelper()
dll.HelperFunction()