擅长:python、mysql、java
<blockquote>
<p>Should my metaclass be a subclass of Enthought's metaclass?</p>
</blockquote>
<p>我相信这是你唯一的选择。如果派生类的元类不是其所有基元类的子类,那么当您尝试创建派生类时,Python将抛出一个TypeError。因此,<code>PythonDirectPublic</code>的元类应该类似于</p>
<pre><code>class DerivedMetaClass(BaseMetaClass):
def __new__(cls, name, bases, dct):
# Do your custom memory allocation here, if any
# Now let base metaclass do its memory allocation stuff
return BaseMetaClass.__new__(cls, name, bases, dct)
def __init__(cls, name, bases, dct):
# Do your custom initialization here, if any
# This, I assume, is where your catalog creation stuff takes place
# Now let base metaclass do its initialization stuff
super(DerivedMetaClass, cls).__init__(name, bases, dct)
</code></pre>
<p>如果您无权访问第三方基类的元类定义,可以将<code>BaseMetaClass</code>替换为<code>enthought.traits.api.HasTraits.__metaclass__</code>。虽然很冗长,但会有用的。在</p>