【发布时间】:2021-12-09 00:33:24
【问题描述】:
假设我有一个在递归/树层次结构中有多个子类的类:
class Animal:
pass
class Cat(Animal):
pass
class HouseCat(Cat):
pass
我有一个函数,可以根据某些条件创建这些类的实例:
from typing import Union
def creator(condition) -> Union[Animal, Cat, HouseCat]:
# for codition1
return Animal()
# for codition2
return Cat()
# ...etc...
我的问题是,如果我只使用 -> Animal: 作为返回值注释,PyCharm 会显示这样的警告:
my_list: List[Cat] = []
obj = creator(...)
my_list.append(obj) # <-- Expected type 'Cat' (matched generic type '_T'), got 'Animal' instead
有没有办法定义类型提示而不是手动为所有子类编写Union?
【问题讨论】:
-
-> Animal因为子类会正确输入 -
Type[Animal]会做到的 :) -
抱歉,编辑了问题,在 PyCharm 中添加了我的问题
标签: python union subclass typing