Pycharm类型提示不使用别名导入ZXY作为XYZ

时间:2019-01-14 17:37:55

标签: python pycharm type-hinting

我有以下代码,Pycharm类型提示未使用我要导入为的“别名”:

from stripe.api_resources.list_object import ListObject as StripeListObject

因此,此功能定义def my_func_name(subscription: StripeListObject, ...):在查看工具提示时应读为my_func_name(subscription: StripeListObject, ...,而应读为my_func_name(subscription: ListObject, ...):

关于这是为什么的任何想法,以及在查看类型提示时如何强制pycharm读取“别名”?

1 个答案:

答案 0 :(得分:1)

根据您的导入,ListObjectStripeListObject指的是完全相同的类型:它们是完全可以互换的。这意味着,如果您有一些接受StripeListObject的函数,则传入ListObject是完全有效的,反之亦然。请注意,在运行时也是如此:在运行时,StripListObject仅是引用基础ListObject类的变量:变量的“名称”不会更改运行时的行为。

这就是为什么PyCharm将鼠标悬停在类型上时会说类型为ListObject的原因:它倾向于显示类型的原始名称,而不是别名。这是一件好事!它有助于防止人们意外地认为这两种类型是不同的(并反映了运行时发生的情况)。

我强烈怀疑这种行为是不可配置的:如果PyCharm以任何其他方式表现,那将是混乱的,并且可以说是错误的。

如果您希望PyCharm将ListObjectStripeListObject视为两种不同的类型,则需要(a)创建一个名为StripeListObject的新类(也许继承自{ {1}}),或(b)将ListObject设为NewType,而不是别名。