gpt4 book ai didi

c++ - 扩展 SWIG 内置类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:54 25 4
gpt4 key购买 nike

SWIG 的 -builtin 选项的优点是速度更快,并且不会出现多重继承的错误。
挫折是我无法在生成的类或任何子类上设置任何属性:
-我可以通过子类化来扩展像列表这样的 python 内置类型,没有麻烦:

class Thing(list):
pass

Thing.myattr = 'anything' # No problem

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

class Thing(SWIGBuiltinClass):
pass

Thing.myattr = 'anything'

AttributeError: type object 'Thing' has no attribute 'myattr'

我该如何解决这个问题?

最佳答案

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

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

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

SwigPyObjectType = type(SWIGBuiltinClass)

class Meta(SwigPyObjectType):
pass

class Thing(SWIGBuiltinClass):
__metaclass__ = Meta

Thing.myattr = 'anything' # Works fine this time

关于c++ - 扩展 SWIG 内置类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469923/

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