【发布时间】:2018-07-03 04:17:50
【问题描述】:
在typing 模块中,TypeVar 和NewType 都需要作为第一个位置参数,一个用作创建对象的__name__ 属性的字符串。这里__name__的目的是什么?
考虑到这是一个强制性的论点,我希望它是必不可少的。在引入类型提示的 PEP-484 中,参数通常设置为分配给对象的变量名称的字符串:
T = TypeVar('T', int, float, complex)
但是,我真的不知道这最终是如何在typing.py 和CPython 中使用的。用任何其他字符串替换字符串似乎不会破坏我的测试中的任何内容。
【问题讨论】:
-
它相当于一个适当类的类名,例如
T中的class T: pass。声明 TypeVar 不会在运行时设置类名,因此我们通过提供名称标签来帮助自己,让我们可以访问 TypeVar 完全相同的名称。但是,正如您正确注意到的那样,没有什么能迫使我们这样做。这是否清楚,或者您的问题是否意味着不同? -
嗨阿恩!您是否熟悉以某种方式设置名称属性的任何用例?在我看来,
__name__在模块级别最有用,我们在其中进行导入和无处不在的if __name__ == "__main__": pass。对于类名,每当我调用或实例化类时,我都必须使用它,但对于TypeVar和NewType,这是通过分配的变量名完成的,所以在键入函数的上下文中,如何使用的属性?
标签: python python-3.6 type-hinting