在 python 类型提示中,如何使参数接受基 class 的任何子 class?

In python type-hinting, how can I make an argument accept any subclass of a base class?

我有一个看起来有点像这样的函数。我希望该函数接受 io.IOBase 的任何子 class - 换句话说,任何类似文件的对象。

def import_csv_file(f:io.IOBase)->pandas.DataFrame:
    return pandas.read_csv(f)

当我在 IntelliJ 中查看对象时,类型提示的 JetBrains 实现拒绝任何输入,除非我准确提供 io.IOBase 的实例 - 但是如果我想传递一个子实例怎么办? class 个 io.IOBase?有没有办法更改类型提示以表明这是允许的?

如果您使用基 class(在您的情况下为 io.IOBase)注释函数参数,那么您还可以传递基 class 的任何子类型的实例——继承适用于注释类型也是如此。

就是说,您可以使用 typing.IO 作为表示任何 I/O 流的通用类型(typing.TextIOtyping.BinaryIO 表示二进制和文本 I/O流)。