Overzealous Optimization For `isinstance`
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 77.2k
- Fork
- 35.9k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug report
Bug description:
The custom __instancecheck__ dunder method allows full customization (described in the Data model).
However, it produces a spurious result:
class CustomIsInstanceMeta(type):
def __instancecheck__(cls, instance: object) -> bool:
return type(instance) is int
class CustomIsInstance(metaclass=CustomIsInstanceMeta):
...
class CustomIsInstanceSubclass(CustomIsInstance):
...
print(isinstance(5, CustomIsInstance)) # True
print(isinstance(CustomIsInstance(), CustomIsInstance)) # True (should be False)
print(isinstance(CustomIsInstanceSubclass(), CustomIsInstance)) # False
This is caused by:
https://github.com/python/cpython/blob/23c488d6197191d355be6733699a295c20806932/Objects/abstract.c#L2641-L2644
which is invalid in this case.
This is a reframing of #79264 (request to fix documentation)
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Linked PRs
- gh-144874
- gh-144997
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
Xem xét Objects/abstract.c tại các dòng 2641-2644 và các PR được liên kết gh-144874 và gh-144997. Chạy bản tái hiện isinstance được cung cấp trên Python 3.13/Linux để xác nhận các kết quả không chính xác. Hoàn tất nghĩa là hành vi được báo cáo đã được giải quyết và kết quả phù hợp với vấn đề tài liệu được nêu trong #79264.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, python
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 25/100