gpt4 book ai didi

支持 __getitem__ 的类的 Python 类型提示

转载 作者:太空狗 更新时间:2023-10-30 00:00:54 25 4
gpt4 key购买 nike

我想向函数添加类型提示,该函数将接受任何具有 __getitem__ 方法的对象。例如,在

def my_function(hasitems, locator):
hasitems[locator]

我不想将 hasitems 限制为特定类型,例如 listdict。只要它支持 __getitem__,它就是 my_function 的适当参数。我怎样才能在没有不必要的限制的情况下注释它的类型?

编辑:显然 PyCharm 可以在许多常见情况下推断出适当的提示,但在我的实际用例中却不能。我无法发布代码,因为它是为了工作,而且我一直无法找到 PyCharm 失败的非专有最小示例。在任何情况下,原始问题都没有引用 PyCharm,它仍然是类型提示的有效用例。

最佳答案

如果您愿意为 typing 安装一个不太正式的扩展,typing-extensions , 你可以使用一个 Protocol,它应该是 PEP-0544 的一个实现:

from typing_extensions import Protocol
from typing import Any

class GetItem(Protocol):
def __getitem__(self: 'Getitem', key: Any) -> Any: pass

class BadGetItem:
def __getitem__(self, a: int, b: int) -> Any: pass

def do_thing(arg: GetItem):
pass

do_thing(dict()) # OK
do_thing(BadGetItem()) # Fails with explanation of correct signature
do_thing(1) # Fails

关于支持 __getitem__ 的类的 Python 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com