【问题标题】:In python type-hinting, how can I make an argument accept any subclass of a base class?在 python 类型提示中,如何使参数接受基类的任何子类?
【发布时间】:2017-05-31 08:40:41
【问题描述】:

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

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

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

【问题讨论】:

  • 我的回答是错误的。这将使函数接受类,而不是实例。我将删除此答案。
  • 但是为什么我不能删除这个接受的答案?

标签: python type-hinting


【解决方案1】:

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

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

【讨论】:

  • typing.IO 是一个更好的解决方案。 :-)
猜你喜欢
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多