我有一个涉及 Python 元类的深奥问题。我正在为 Web 服务器端代码创建一个 Python 包,这将使通过客户端代理访问任意 Python 类变得容易。我的代理生成代码需要一个包含我想要包含在我的 API 中的所有 Python 类的目录。为了创建这个目录,我使用__metaclass__
特殊属性在类创建过程中加入了一个钩子。具体来说,“已发布”API 中的所有类都将子类化一个特定的基类 ,PythonDirectPublic
该基类本身具有一个__metaclass__
已设置为记录有关类创建信息的类。
到现在为止还挺好。变得复杂的地方是我希望我PythonDirectPublic
自己从第三方类(enthought.traits.api.HasTraits
)继承。这个第三方类也使用__metaclass__
.
那么管理两个元类的正确方法是什么?我的元类应该是 Enthought 元类的子类吗?或者我应该只是在我的元类方法中调用 Enthought 的元类__new__
来获取我将返回的类型对象?还是在这种特殊情况下可以使用其他一些神秘的咒语?