【问题标题】:Pycharm Type Hint Not Using Alias Import ZXY as XYZPycharm 类型提示不使用别名 Import ZXY as XYZ
【发布时间】:2019-06-08 17:43:23
【问题描述】:

我有以下代码并且 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 读取“别名”的任何想法?

【问题讨论】:

  • “查看类型提示”是什么意思? PyCharm 实际上是在实际函数定义中将该参数类型提示为ListObject 而不是StripeListObject,还是您正在查看工具提示或其他内容?
  • 我正在查看工具提示(我对其进行了编辑),但我想我知道发生了什么。别名实际上并没有改变类名,所以类型仍然是ListObject。问题是,我的函数定义是说参数是别名。这是一个问题,因为如果工具提示说它需要一个 ListObject 我会假设我可以传入一个列表,但实际上代码正在寻找一个条纹列表对象。

标签: python pycharm type-hinting


【解决方案1】:

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

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

我强烈怀疑这种行为是不可配置的:如果 PyCharm 以任何其他方式表现,它会令人困惑并且可能是错误的。

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

【讨论】:

  • 这就是我认为正在发生的事情。
猜你喜欢
  • 2019-04-23
  • 2013-12-26
  • 2022-08-04
  • 2015-11-23
  • 2016-03-22
  • 1970-01-01
  • 2017-08-14
  • 2019-02-20
  • 2019-05-27
相关资源
最近更新 更多