<p>下面是更务实的答案。</p>
<p><strong>这无关紧要</strong></p>
<ol>
<li><p>“<a href="https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python">What is a metaclass in Python</a>”。总之,<code>type</code>是所有类的元类。你这样做几乎没有实际意义。</p>
<pre><code>class X(object):
pass
type(X) == type
</code></pre></li>
<li><p>“<a href="https://stackoverflow.com/questions/392160/what-are-your-concrete-use-cases-for-metaclasses-in-python">What are your (concrete) use cases for metaclasses in Python?</a>”。底线。没有。</p></li>
<li><p>“<a href="http://fuhm.net/super-harmful/" rel="nofollow noreferrer">Python's Super is nifty, but you can't use it</a>”。有趣的音符,但实用价值不大。您永远不需要解析复杂的多重继承网络。通过使用显式<strong>策略设计而不是多重继承,很容易防止出现此问题。</p></li>
</ol>
<p>以下是我在过去7年的Python编程经验。</p>
<ol>
<li><p>一个类有一个或多个超类,形成从我的类到<code>object</code>的简单链。</p></li>
<li><p>“类”的概念由名为<code>type</code>的元类定义。我可能想扩展“类”的概念,但到目前为止,它还没有在实践中出现。一次也没有。<code>type</code>总是做正确的事情。</p></li>
<li><p>使用<code>super</code>在实践中效果非常好。它允许一个子类服从它的超类。它碰巧出现在这些元类示例中,因为它们正在扩展内置元类<code>type</code>。</p>
<p>然而,在所有子类的情况下,您将使用<code>super</code>来扩展超类。</p></li>
</ol>
<p><strong>元类</strong></p>
<p>元类问题是:</p>
<ul>
<li><p>每个对象都有对其类型定义或“类”的引用。</p></li>
<li><p><code>class</code>本身也是一个对象。</p></li>
<li><p>因此,<code>class</code>类型的对象具有对其类型或“类”的引用。“类”的“类”是一个元类。</p></li>
</ul>
<P>因为“类”不是C++运行时对象,所以C++中没有发生这种情况。它确实发生在Java、Smalltalk和Python中。</p>
<p>元类定义类对象的行为。</p>
<ul>
<li><p>与类的交互90%是要求类创建一个新对象。</p></li>
<L>>P 10%,您将使用类方法或类变量(C++中的静态)或java语句。</p></LI>
</ul>
<p>我发现了一些类级方法的用例。我几乎没有类变量的用例。我从来没有机会改变对象构造的工作方式。</p>