False negative when lvalue has union type
Đang mở
Chưa có ai nhận issue này.
affects-mypyc
bug
topic-union-types
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Mypy generates no error, even though the code is unsafe:
class C[T]:
a: T
def f(x: C[int] | C[str]) -> None:
x.a = 1 # No error
c = C[str]()
f(c)
print(c.a, type(c.a)) # 1, int
I'd expect x.a = 1 to generate an error, since the assignment is unsafe.
I suspect that the lvalue type is inferred as int | str, and mypy thinks it's fine. instead, assignment should be valid for each union item separately.
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 bằng cách tái hiện ví dụ generic-union được cung cấp bằng mypy và kiểm tra đường dẫn kiểm tra kiểu cho các phép gán vào lvalues được định kiểu union. Được xem là hoàn tất khi phép gán bị từ chối nếu không an toàn đối với bất kỳ thành viên union nào, trong khi các phép gán hợp lệ vẫn tiếp tục được chấp nhận.
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
- compilers, devtools
- 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
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100