python / python/typing

Option to type default default arguments in Callable types - `WithDefault`

Đang mở
#1,232 5 bình luận 5 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

topic: feature
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

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.