扩展SWIG内置类

MON*_*ONK 6 c++ python swig

SWIG的-builtin选项具有更快的优点,并且可以免除多重继承的错误.
挫折是我无法在生成的类或任何子类上设置任何属性:
-I可以通过子类化扩展python内置类型,如list,没有麻烦:

class Thing(list):
    pass

Thing.myattr = 'anything' # No problem
Run Code Online (Sandbox Code Playgroud)

- 但是在SWIG内置类型上使用相同的方法,会发生以下情况:

class Thing(SWIGBuiltinClass):
    pass

Thing.myattr = 'anything'

AttributeError: type object 'Thing' has no attribute 'myattr'
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

MON*_*ONK 4

我很偶然地找到了一个解决方案。我正在尝试元类,认为我可以设法覆盖子类中内置类型的setattrgetattr函数。

这样做我发现内置函数已经有一个元类(SwigPyObjectType),所以我的元类必须继承它。

就是这样。仅此一点就解决了问题。如果有人能解释原因,我会很高兴:

SwigPyObjectType = type(SWIGBuiltinClass)

class Meta(SwigPyObjectType):
    pass

class Thing(SWIGBuiltinClass):
    __metaclass__ = Meta

Thing.myattr = 'anything' # Works fine this time
Run Code Online (Sandbox Code Playgroud)