В нашей кодовой базе есть Python и C ++, объединенные SWIG. Классы 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
?