gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:49:31 25 4
gpt4 key购买 nike

在我们的代码库中,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) 来判断.不管方法是如何分配的,它都将是<type 'instancemethod'>。 .

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

关于python - 何时使用 new.instancemethod 与将方法分配给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com