何时使用new.instancemethod与将方法分配给类

在我们的代码库中,有SWIG联结的Python和C.有时为C类提供Python扩展,如下所示:

%pythoncode %{

def DiscreteKey_baseData(self, baseData):
    pass

def DiscreteKey_asSet(self):
    pass

DiscreteKey.baseData = new_instancemethod(DiscreteKey_baseData, None, DiscreteKey)
DiscreteKey.asSet = new_instancemethod(DiscreteKey_asSet, None, DiscreteKey)

%}

要么

%pythoncode %{

def ParmID_hash(parmID):
    return hash(str(parmID))

ParmID.__hash__ = ParmID_hash

%}

如第二个示例所示,使用new.instancemethod将方法附加到类与简单地分配它之间有什么区别?可以将第一个示例更改为简单

DiscreteKey.baseData = DiscreteKey_baseData
DiscreteKey.asSet = DiscreteKey_asSet

? (请注意,baseData需要另一个参数)

还是第二个示例实际上在某种程度上是不足的,应该也使用new_instancemethod?

解决方法:

将一个函数分配给一个类属性,然后通过new_instancemethod()(我认为这是方法构造函数的Swig别名,例如types.MethodType)进行完全相同的操作.您可以通过检查type(DiscreteKey.baseData)来判断.不管如何分配方法,它都是<类型'instancemethod'>.

但是,将函数分配给实例时,new_instancemethod()构造函数很有用.没有方法“包装器”,这将无法工作.

上一篇:为C(指针)创建python的Swig包装器


下一篇:通过CGI脚本将PHP转换为C/C++