微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

泛型类型在 stubgen 生成的 .pyi 文件中丢失了它们的 Generic[T, ...] 基类

如何解决泛型类型在 stubgen 生成的 .pyi 文件中丢失了它们的 Generic[T, ...] 基类

假设有一个非常简单的类表示一个通用堆栈,因此继承自 Generic[T] (§1)。

from typing import TypeVar,Generic,List

T = TypeVar('T')

class Stack(Generic[T]): #1
    def __init__(self) -> None:
        self.items: List[T] = []

    def push(self,item: T) -> None:
        self.items.append(item)

    def pop(self) -> T:
        return self.items.pop()

    def empty(self) -> bool:
        return not self.items

然后让我们为 .pyi 类所在的模块生成一个存根文件 Stack,例如 stack.py

$ stubgen stack.py --output stubs

很明显,Generic[T] 基类被意外剥离 (§2)。同时,items 属性的类型提示被替换为 Any (§3)。此外,更奇怪的是 pushpop 的存根版本仍然分别带有参数和返回值的类型提示 T ( §4§5).

from typing import Any,TypeVar

T = TypeVar('T')

class Stack: #2
    items: Any = ... #3
    def __init__(self) -> None: ...
    def push(self,item: T) -> None: ... #4
    def pop(self) -> T: ... #5
    def empty(self) -> bool: ...

生成存根的过程中发生了什么?是否有任何解释可以证明这种行为是正当的?

附言我的 mypy 版本是 0.790。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。