繁体   English   中英

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM