我想向一个函数添加类型提示,该函数将接受带有__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(使用前将#替换为@)