Help us understand the problem. What is going on with this article?

Python3 の少し複雑な型ヒントの具体例

More than 1 year has passed since last update.

Python3.5から導入されたうれしい型ヒント機能ですが、「このような型はどうやって定義すれば?」と思うことがあったので、メモしました。
(ジェネリクスについては難しいので、今回はなしで・・)

str または bytes のようなORの型ヒント

Union[str, bytes] のように Union を使えば可能です。

def func(src: typing.Union[str, bytes]):
    ...

ファイルのように扱える (file-like object) の型ヒント

# file-like object型ヒント
def func(file: typing.IO):
    ...

# テキストであることを明示
def func_text(file: typing.TextIO):
    ...

# バイナリであることを明示 
def func_binary(file: typing.BinaryIO):
    ...

C の typedef のように別名をつける(型エイリアス)

import typing 

# typing module の中にあるものは代入で別名をつけることができます
AppSetting = typing.Dict[str, dict]

継承した型をつくる (NewType)

型エイリアスは別名をつけるだけですが、NewTypeはサブクラスのような扱いになります

# str, int のようなビルトインの型でも可能です
UserID = typing.NewType('UserID', int)

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした