allow `...` in place of generic parameters
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng việc đọc issue mypy được liên kết và tài liệu về star-projection của Kotlin. So sánh cú pháp ... được đề xuất với các phương án Any, object và Never, sau đó xác định ngữ nghĩa kiểu và phạm vi triển khai. Công việc được xem là hoàn tất khi có một đặc tả đã được thống nhất và hỗ trợ tương ứng trong các công cụ kiểm tra kiểu liên quan.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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)
- Ngôn ngữ chính
- Python
- Star
- 1.8k
- Fork
- 302
- Merge trung bình
- 23 giờ
- Pull request đã merge (30 ngày)
- 8
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python/typing
-
topic: typing spec
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
topic: typing spec
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
topic: documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
topic: documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
topic: conformance tests topic: typing spec
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 72/100
Tất cả issue của python/typing
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
use-agent-os/agent-os#3314 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
BasedHardware/omi#15662 · 1 bình luận ·
-
documentation help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
AiursoftWeb/AnduinOS-2#19 ·