Python PyCharm中不强制从具有具体类型参数的泛型抽象类继承

Python PyCharm中不强制从具有具体类型参数的泛型抽象类继承,python,generics,inheritance,abstract-class,Python,Generics,Inheritance,Abstract Class,背景:我正在使用PyCharm 2019.1和Python 3.7 问题:我想创建一个泛型抽象类,这样当我从它继承并将泛型类型设置为具体类型时,我希望继承的方法识别具体类型,并在类型不匹配时显示警告 带子类的泛型ABC 从abc导入abc,abstractmethod 从输入importtypevar,Generic T=类型变量(“T”) 类FooGenericAbstract(ABC,泛型[T]): @抽象方法 def func(自)->T: 通过 类Foo(FooGenericAbstra

背景:我正在使用PyCharm 2019.1和Python 3.7

问题:我想创建一个泛型抽象类,这样当我从它继承并将泛型类型设置为具体类型时,我希望继承的方法识别具体类型,并在类型不匹配时显示警告

带子类的泛型ABC
从abc导入abc,abstractmethod
从输入importtypevar,Generic
T=类型变量(“T”)
类FooGenericAbstract(ABC,泛型[T]):
@抽象方法
def func(自)->T:
通过
类Foo(FooGenericAbstract[dict]):#我将T指定为dict类型
def func(self)->dict:#如果返回类型不正确,我希望返回类型显示警告
通过
不正确类型无警告 这里可能会出现错误,因为返回类型
list
与具体类型参数
dict
不匹配

class Foo(FooGenericAbstract[dict]):#我将T指定为dict类型
def func(self)->list:#这里应该是一个警告!
通过
使用coc.nvim和Python3.8时,MyPy0.770会按预期发出警告


我想也许你应该使用类型提示而不是内置类型,因为mypy直到现在都无法识别内置类型。

PyCharm通常对类型提示的支持非常弱,因此建议始终使用

您的示例就是这样一种情况:显式注释以静默方式覆盖基类指定的类型,即使使用
键入
模块中的大写
列表
Dict
类型。它使用Mypy插件时会引发预期的错误

from abc import ABC, abstractmethod
from typing import Dict, Generic, List, TypeVar

T = TypeVar("T")


class FooGenericAbstract(ABC, Generic[T]):

    @abstractmethod
    def func(self) -> T:
        pass


class Foo(FooGenericAbstract[Dict[str, int]]): 

    def func(self) -> Dict[str, str]:
        pass