Wrong Signature for singledispatch'ed functions/methods
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 36k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
An example:
$ cat -n spam.py
1 from __future__ import annotations
2 from functools import singledispatch
3
4 @singledispatch
5 def foo(x: int) -> int:
6 return x + 1
7
8 @foo.register
9 def _(x: str) -> str:
10 return "Hello, " + x
$ python
Python 3.11.1+ (heads/3.11:ba88628808, Jan 14 2023, 08:40:06) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect, spam
>>> inspect.signature(spam.foo)
<Signature (x: 'int') -> 'int'>
I would expect here something like <Signature (x: int | str) -> int | str> (i.e. union of types for returned value, same for argument) or an exception.
I'm not sure that the first option is on the table: more accurately this situation fits to case of multiple function signatures (like we have in the stdlib e.g. for the min/max). But the current signature() output is misleading.
UPD: In fact, the Signature must be like <Signature (x: int | str, /) -> int | str>, because:
>>> spam.foo(x=1)
Traceback (most recent call last):
...
TypeError: foo requires at least 1 positional argument
Or we can make singledispatch'ed function to be with a positional-only argument iff argument names for different overloaded implementations are different.
PS: Inspired by https://discuss.python.org/t/signatures-a-call-to-action/23580
Hướng dẫn đóng góp
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
Tái hiện ví dụ bằng cách sử dụng functools.singledispatch và inspect.signature, bao gồm cả hành vi của đối số vị trí được nêu trong báo cáo. Xác định ngữ nghĩa chữ ký nào là chủ đích, sau đó thêm phạm vi kiểm thử hồi quy để thể hiện kết quả đã thống nhất; issue hoàn tất khi các chữ ký của singledispatch không còn trình bày một cách gây hiểu lầm chỉ phần triển khai cơ sở.
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
- backend
- Loại issue
- Lỗi
- Độ 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