Abstract class properties that are classes incorrectly reported in assignments
Chưa có ai nhận issue này.
- 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ả
-
Are you reporting a bug, or opening a feature request?
I believe this is a bug. -
Please insert below the code you are checking with mypy
from abc import ABC, abstractmethod
from typing import Type
class ISolution(ABC):
@abstractmethod
def __init__(self, b: int):
pass
@abstractmethod
def func1(self, a: int) -> int:
pass
class MySolution(ISolution):
def __init__(self, b: int):
self._b = b
def func1(self, a: int) -> int:
return a + self._b
class IHolder(ABC):
@property
@classmethod
@abstractmethod
def SolutionClass(cls) -> Type[ISolution]:
pass
# SolutionClass: Type[ISolution]
@abstractmethod
def __init__(self, c: int):
pass
@abstractmethod
def cval(self) -> int:
pass
class Main(IHolder):
SolutionClass = MySolution
def __init__(self, c: int):
self._c = c
def cval(self) -> int:
return self._c
def check(holderclass: Type[IHolder], a: int, b: int, c: int) -> bool:
holder = holderclass(c)
solclass: Type[ISolution] = holderclass.SolutionClass
return solclass(b).func1(a) == holder.cval()
print("should be true ", check(Main, 5, 5, 10))
print("should be false ", check(Main, 3, 4, 10))
- What is the actual behavior/output?
classprop.py:53: error: Incompatible types in assignment (expression has type "Callable[[], Type[ISolution]]", variable has type "Type[ISolution]")
This is referring to the line:
solclass: Type[ISolution] = holderclass.SolutionClass
- What is the behavior/output you expect?
No error to be reported.
Note. If you comment out
@property
@classmethod
@abstractmethod
def SolutionClass(cls) -> Type[ISolution]:
pass
and then uncomment
SolutionClass: Type[ISolution]
then mypy says the code is fine.
-
What are the versions of mypy and Python you are using?
mypy 0.770
python 3.7.6 -
Do you see the same issue after installing mypy from Git master?
I'm trying to avoid dealing with that! -
What are the mypy flags you are using? (For example --strict-optional)
None
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 chẩn đoán với ví dụ được cung cấp về abstract class, property và classmethod. So sánh suy luận kiểu cho holderclass.SolutionClass với phiên bản thuộc tính lớp có chú thích, sau đó xác minh rằng phép gán cho solclass không còn báo cáo kiểu không tương thích.
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, tooling
- 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