擅长:python、mysql、java
<p>正是<code>__getitem__</code>方法实现了所有的魔法。在</p>
<p>这是用<code>[</code>和<code>]</code>方括号订阅一个名称时调用的方法。在</p>
<p>因此,您需要在类的类中使用一个<code>__getitem__</code>方法,即它的元类,它将获得括号内的任何内容作为参数。该方法负责动态创建(或检索缓存副本)要生成的任何内容,并将其返回。在</p>
<p>我只是不太可能想象您希望如何进行类型暗示,因为类型库似乎涵盖了所有合理的情况(我想不出它们还没有涵盖的示例)。但是让我们假设您希望一个类返回其自身的副本,但是参数anotate作为它的<code>type_</code>属性:</p>
<pre><code>class MyMeta(type):
def __getitem__(cls, key):
new_cls = types.new_class(f"{cls.__name__}_{key.__name__}", (cls,), {}, lambda ns: ns.__setitem__("type", key))
return new_cls
class Base(metaclass=MyMeta): pass
</code></pre>
<p>在交互式模式下尝试时,您可以:</p>
^{pr2}$