Python PyCharm检验不';在类型注释中不显示我自己的类的警告

Python PyCharm检验不';在类型注释中不显示我自己的类的警告,python,pycharm,inspection,Python,Pycharm,Inspection,这是我的密码。它起作用了。注意A行和B行 from dataclasses import dataclass, field, InitVar import datetime from typing import List, Optional @dataclass class Book: author: str = 'no data' title: str = 'no data' @dataclass class Library: name: str = 'no dat

这是我的密码。它起作用了。注意A行和B行

from dataclasses import dataclass, field, InitVar
import datetime
from typing import List, Optional

@dataclass
class Book:
    author: str = 'no data'
    title: str = 'no data'

@dataclass
class Library:
    name: str = 'no data'
    books: List[Book] = field(default_factory=list)  # line A - books attribute type annotation
    gen_time: InitVar[bool] = True
    creation_timestamp: Optional[str] = None

    def __post_init__(self, gen_time):
        if gen_time:
            self.creation_timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

def main():

    b_1 = Book('J. Mouse', 'Beautiful mice')
    b_2 = Book('M. Catling', 'Magic kittens')
    b_3 = Book('A. Dogg', 'Tasty Dogs')
    print(b_1, b_2, b_3)

    bb_1 = Library('My library', gen_time=False)
    bb_1.books.extend([bb_1, b_2, b_3, 1])  # line B - add books and not books to newly created empty library
    print(bb_1)


if __name__ == '__main__':
    main()
第A行表示
Book
attrbute应该是一个包含
Book
对象的列表。在B行中,我将
Book
Library
int
添加到
books
中。PyCharm没有告诉我这是否是个问题

但是,如果我稍微修改了A行books:List[str]=field(默认工厂=List)(
Book
str
),PyCharm会给出以下非常有用的警告:

应为类型“Iterable[str]”(匹配的泛型类型为“Iterable[\u T]”), 改为“List[Union[Library,Book,int]]”

那么,为什么PyCharm检查在这两种情况下表现不同呢?我怎样才能看到带有原始代码的警告


p.S.Win10/Python 3.7/PyCharm Community Edition 2019.2,无任何修改/添加。

推断的
[bb_1,b_2,b_3,1]
类型为
列表[Union[Library,Book,int]
,它以以下方式匹配预期类型:

  • 容器类型相同,
    列表
  • 实际值类型
    Union[Library,Book,int]
    包含预期的
    Book
    类型——这里的类型检查器满足要求,没有任何说明

  • 这是PyCharm类型系统中的一个错误。

    谢谢您的解释。希望这个错误会被修复。现在,我想我应该使用另一个检查器和PyCharm的检查器。如果我在乎的话。