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)
我怎么能解决这个问题?
我很偶然地找到了一个解决方案。我正在尝试元类,认为我可以设法覆盖子类中内置类型的setattr和getattr函数。
这样做我发现内置函数已经有一个元类(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)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |