Option to type default default arguments in Callable types - `WithDefault`
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 1.8k
- Fork
- 302
- Merge trung bình
- 23 giờ
- Pull request đã merge (30 ngày)
- 8
Mô tả
At the moment it's only possible to type callables with default arguments by using a Callback protocol . This adds a lot of additional code for just a few default arguments. Moreover it requires that users have at least a basic understanding of Protocols which is one of the more advanced typing concepts. Lastly, a Callback protocol can't be used to type a generic ParamSpec argument.
Proposal
Add a new WithDefault special type which can be used to annotate arguments in callable types.
Examples
from typing import Callable, TypeAlias, WithDefault
def func(a: str, b: int = 0) -> None: ...
def other(a: str, b: int) -> None: ...
def g(f: Callable[[str, WithDefault[int]], None]) -> None:
f("Hello") # ok
f("World", 2) # ok
g(func) # ok
g(other) # error
For generic ParamSpec types
class Job(Generic[_P]):
def __init__(self, target: Callable[_P, None]) -> None:
self.target = target
def g(job: Job[str, WithDefault[int]]) -> None:
job.target("Hello") # ok
job.target("Hello", 2) # ok
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.
Hướng nghiên cứu
Bắt đầu với các ví dụ Callable và ParamSpec tổng quát trong đề xuất, sau đó xem xét cách các đối số mặc định hiện được biểu diễn thông qua các giao thức callback. Xác định hành vi kiểu cho WithDefault, bao gồm việc chấp nhận các đối số bị bỏ qua và từ chối các đối số bắt buộc, đồng thời xác thực cả hai ví dụ trước khi coi tính năng là hoàn chỉnh.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- developer-experience
- Loại issue
- Tính năng
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100