我正在尝试为对象解包实现类型提示。
from typing import Tuple
class A:
def __init__(self, x: int, y: str):
self.x = x
self.y = y
def astuple(self) -> Tuple[int, str]:
return self.x, self.y
# Need to annotate the return type of __iter__
def __iter__(self):
return iter(self.astuple())
a = A(1, "a")
# This cannot infer the type of x and y
x, y = a
reveal_type(x)
reveal_type(y)
# This infers the type of p and q as int and str respectively
p, q = a.astuple()
reveal_type(p)
reveal_type(q)
印刷品
$ mypy unpack_object.py
unpack_object.py:20: note: Revealed type is "Any"
unpack_object.py:21: note: Revealed type is "Any"
unpack_object.py:24: note: Revealed type is "builtins.int"
unpack_object.py:25: note: Revealed type is "builtins.str"
Success: no issues found in 1 source file
但是,我希望mypy能够推断出x
,y
(int
,str
)的正确类型,我该如何实现呢?
1条答案
按热度按时间dzjeubhm1#
在Python中没有办法定义自己的异构可迭代类型,而是将
A
作为NamedTuple
的子类。