Mypy does not honor implicitly abstract class in stubs; false positive about ABCMeta
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 45/100
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện vấn đề với bar.py và foo.py, sau đó đổi tên bar.py thành bar.pyi và chạy mypy foo.py. Kiểm tra mypy/semanal_classprop.py quanh các dòng 98-100 để hiểu cách xử lý stub. Được xem là hoàn tất khi ví dụ dựa trên stub không báo lỗi thuộc tính trừu tượng nào, phù hợp với trường hợp mô-đun Python thông thường.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug Report
When analyzing stub files, mypy issues false positives when an implicitly abstract class inherits from abc.ABC rather than setting metaclass=ABCMeta:
To Reproduce
Have an implicitly abstract class in a file.
# bar.py
import abc
class A(abc.ABC): # same behavior as if using metaclass=abc.ABCMeta here
@abc.abstractmethod
def meth(self) -> None:
pass
class B(A): # at runtime B.__class__ shows the metaclass is abc.ABCMeta
pass
Import and subclass the implicitly abstract class
# foo.py
import bar
class C(bar.B):
def meth(self) -> None:
pass
$ mypy foo.py
Success: no issues found in 1 source file
Rename the imported module so it's a stub.
$ mv bar.py bar.pyi
Expected Behavior
$ mypy foo.py
Success: no issues found in 1 source file
Actual Behavior
$ mypy foo.py
bar.pyi:10: error: Class bar.B has abstract attributes "meth" [misc]
bar.pyi:10: note: If it is meant to be abstract, add 'abc.ABCMeta' as an explicit metaclass
Found 1 error in 1 file (checked 1 source file)
Mypy should emulate the runtime behavior and understand that B.__class__ is always going to be abc.ABCMeta.
Seems the bug is here: https://github.com/python/mypy/blob/master/mypy/semanal_classprop.py#L98-L100
Your Environment
- Mypy version used: 1.9
- Python version used: python 3.11
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 54
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.
Issue khác của python/mypy
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
bug topic-configuration topic-error-reporting
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
zostera/django-bootstrap4#894 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
use-agent-os/agent-os#3276 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
NousResearch/hermes-agent#117848 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
zilliztech/memsearch#759 ·