Should `callable` narrow to `TypeIs[Callable[..., object]]` or `TypeIs[Callable]` ?
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 5.1k
- Fork
- 2.1k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 82
Mô tả
Currently, typeshed annotates
def callable(obj: object, /) -> TypeIs[Callable[..., object]]: ...
However, for the majority of type checkers this creates discrepancy between collections.abc.Callable and builtins.callable narrowing, only ty seems to consider blank Callable as if it were Callable[..., object], whereas all other type checkers treat it as Callable[..., Any].
from typing import reveal_type, TypeIs
from collections.abc import Callable
def is_callable(arg: object) -> TypeIs[Callable]:
raise NotImplementedError
def check_callable(arg: object) -> None:
if isinstance(arg, Callable):
reveal_type(arg)
def check_callable2(arg: object) -> None:
if callable(arg):
reveal_type(arg)
def check_callable3(arg: object) -> None:
if is_callable(arg):
reveal_type(arg)
| case | isinstance(x, Callable) | is_callable | callable(x) |
|---|---|---|---|
| mypy | ERROR | (...) -> Any | <callable subtype of object> |
| pyright | (...) -> Unknown | (...) -> Unknown | (...) -> object |
| pyrefly | (...) -> Unknown | (...) -> Unknown | (...) -> object |
| ty | (...) -> object | (...) -> Any | (...) -> object |
| zuban | ERROR | (...) -> Any | <callable subtype of object> |
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
Bắt đầu với annotation builtins.callable và so sánh nó với collections.abc.Callable. Chạy các ví dụ dựa trên các hành vi của type-checker được liệt kê trong issue, sau đó xem lại phần thảo luận trong các bình luận để xác định annotation nào cung cấp narrowing nhất quán; được xem là hoàn tất khi stub được chọn khớp với hành vi mong muốn trên tất cả các checker bị ảnh hưởng.
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, tooling
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 38/100