支持 __getitem__ 的类的 Python 类型提示

2024-04-18

我想向一个函数添加类型提示,该函数将接受带有__getitem__方法。例如,在

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

我不想限制hasitems成为特定类型,例如list or dict。只要支持__getitem__,这是一个适当的论据my_function。如何注释其类型而不受到不必要的限制?

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


如果您愿意安装一个不太官方的扩展typing, 打字扩展 https://pypi.org/project/typing-extensions/,你可以使用Protocol,这应该是一个实现PEP-0544 https://www.python.org/dev/peps/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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

支持 __getitem__ 的类的 Python 类型提示 的相关文章

随机推荐