簡體   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