allow `...` in place of generic parameters
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 1.8k
- 派生
- 302
- 平均合并
- 23 小时
- 30 天内合并 PR
- 8
描述
from https://github.com/python/mypy/issues/11389
Feature
in kotlin, you can omit a generic from a type annotation when you don't care what its value is:
class Foo<T: Number>
fun foo(value: Foo<*>) {}
more info:
- https://kotlinlang.org/docs/generics.html#star-projections
- https://typealias.com/guides/star-projections-and-how-they-work/
Pitch
-
it's especially useful for types that have multiple bounded generics
i think this could be accomplished by simply allowing
...to be used in place of the genericsThing1 = TypeVar("Thing1", bound=Base1, covariant=True) Thing2 = TypeVar("Thing2", bound=Base2, covariant=True) Thing3 = TypeVar("Thing3", bound=Base3, covariant=True) class ThingWithLotsOfGenerics(Generic[Thing1, Thing2, Thing3]): ... def foo(value: ThingWithLotsOfGenerics[..., ..., ...]) -> None: ... -
Another usage is to ignore variance issues when you don't care about accessing the values.
@dataclass class Box(Generic[T]): t: T def foo(b: Box[...]): print(b) def bar(b: Box[object]): print(b) b = Box(1) foo(b) # no error bar(b) # error, Box[int] incompatible with Box[object]
Alternatives
Use Any
Any removes all type safety so is not a good solution
T = TypeVar("T")
class Foo(Generic[T]):
a: T
def foo(f: Foo[Any]):
f.a = "AMONGUS😳"
f = Foo[int]()
foo(f)
Use object/Never
This doesn't work if your TypeVar is bound, you have to specify the bound, which is non-optimal for many reasons.
class Foo: ...
T = TypeVar("T", bound=Foo, covariant=True)
class Bar(Generic[T]):
...
# error: Type argument "object" of "Bar" must be a subtype of "Foo" [type-var]
def foo(value: Bar[object]) -> None:
...
(also being tracked in KotlinIsland/basedmypy#30 and https://github.com/DetachHead/basedpyright/issues/18)
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先阅读链接的 mypy issue 和 Kotlin 的 star-projection 文档。将提议的 ... 语法与 Any、object 和 Never 这些替代方案进行比较,然后确定类型语义和实现范围。完成的要求是达成一份共识规范,并在相关的类型检查工具中提供相应支持。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- devtools
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100