【发布时间】:2019-03-12 17:54:35
【问题描述】:
我想向一个函数添加类型提示,该函数将接受具有__getitem__ 方法的任何对象。例如,在
def my_function(hasitems, locator):
hasitems[locator]
我不想将 hasitems 限制为特定类型,例如 list 或 dict。只要它支持__getitem__,它就是my_function 的合适参数。如何在没有不必要限制的情况下注释其类型?
编辑:显然 PyCharm 可以在许多常见情况下推断出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是用于工作的,而且我无法找到 PyCharm 失败的非专有最小示例。在任何情况下,原始问题都没有引用 PyCharm,它仍然是类型提示的有效用例。
【问题讨论】:
-
用那个单一的抽象方法创建一个
abc。 -
请问这样的提示有什么用? IDE 已经根据使用情况自动扣除提示。您是否将这些提示用于其他目的?
-
然后升级。对我来说,调用
my_function(5, 10)时 PyCharm 产生:> 类型 'int' 没有预期的属性 'getitem' 更少... (Ctrl+F1) 检查信息:此检查检测函数中的类型错误调用表达式。由于动态调度和鸭子类型,这在有限但有用的情况下是可能的。函数参数的类型可以在文档字符串或 Python 3 函数注释中指定。 -
我建议您将实际代码放在问题中。这样我们可以更有帮助。
-
您使用的是哪个 Python 版本? 3.7 引入了协议,应该可以解决这个问题:python.org/dev/peps/pep-0544
标签: python type-hinting python-typing