“ typing”模块类中的“ []”如何实现?

时间:2018-10-17 09:40:08

标签: python

使用typing模块,您可以编写

from typing import Dict
my_type: Dict[str, int]

其中Dict是一个类。我的问题是:什么是类名后面的括号。 python的哪个语法方面允许该语法?我如何在自己的课堂上做类似的事情?

1 个答案:

答案 0 :(得分:2)

感谢@timgeb为我指出正确的方向。原来它确实使用__getitem__。但是,由于__getitem__引用了 instance ,因此必须在当前类为其实例的某种对象中对其进行定义。因此,您必须使用元类。例如

class Root(type):
    def __getitem__(self, i):
        print(f'arguments: {i}')


class MyDict(metaclass=Root):
    pass

现在,与

MyDict[list, str]

你得到

arguments: (<class 'list'>, <class 'str'>)