94736


# 質問

型ヒント（Type hint）と型アノテーション（Type annotation）の違いを教えてください。

たとえば、「以下の`power`関数の戻りに型ヒントが付いていない」という表現は正しいでしょうか？

[code]

    def power(val: int):
       return val * val
    
[/code]

型ヒントか型アノテーションかどちらが正しいのか、または同じ意味なのかが分からず、質問しました。

<https://docs.python.org/ja/3/library/typing.html>

# 調べたこと

公式ドキュメントの[Type Hint](https://docs.python.org/3/glossary.html#term-type-
hint)には、

> An annotation that specifies the expected type for a variable, a class
> attribute, or a function parameter or return value.

と書かれているので、型アノテーションより型ヒントの方が広い意味になると思いました。


CC BY-SA 4.0
2023-05-02T16:35:59.803
94721
2023-05-04T05:32:24.317
19524
question
python
Pythonの型ヒントと型アノテーションの違いを教えてください。


型ヒント（Type hint）と型アノテーション（Type annotation）は同じものを指し示す別名のようです。  
なので「たとえば、「以下のpower関数の戻りに型ヒントが付いていない」という表現は正しいでしょうか？」については「正しい」と思われます。

以下は根拠となる資料です。  
[PEP 484 – Type Hints](https://peps.python.org/pep-0484/)

> **Rationale and Goals**  
>  This PEP aims to provide a standard syntax for type annotations,  
>  この PEP は、型注釈の標準構文を提供することを目的としています。

[PEP 526 – Syntax for Variable Annotations](https://peps.python.org/pep-0526/)

> **Abstract**  
>  PEP 484 introduced type hints, a.k.a. type annotations.  
>  PEP 484 は型ヒント、別名型注釈を導入しました。

上記PEP 484の記述の直前には以下の記述が有ります。

> PEP 3107 added support for arbitrary annotations on parts of a function
> definition.  
>  PEP 3107 は、関数定義の一部に任意の注釈のサポートを追加しました。

> Although no meaning was assigned to annotations then, there has always been
> an implicit goal to use them for type hinting, which is listed as the first
> possible use case in said PEP.  
>  当時は注釈に意味が割り当てられていませんでしたが、型ヒントに注釈を使用するという暗黙の目標が常にありました。

つまり型ヒント（Type hint）の形式で記述されたアノテーション（Annotation）は型アノテーション（Type
annotation）と呼べるということでしょう。

質問に紹介された公式ドキュメントのType Hintに書かれていることは、「変数、クラス属性、または関数パラメーターまたは戻り値の予想される型を指定する
**アノテーション** 」であるということで、対象となるのは **アノテーション**
であって、その記述の中には組み合わせた(あるいは定義される範囲を絞った)単語である「型アノテーション」とは違うとも同じとも書かれていないと思われます。


CC BY-SA 4.0
2023-05-03T05:44:53.827
94725
2023-05-03T05:44:53.827
26370
94721
answer


> 型ヒント（Type hint）と型アノテーション（Type annotation）の違い

これは、「annotation」という語が多義的であり、文脈が無いと判断できません。現実的にはよく考えずに使用されていることも多いと思いますし、誰も定義していない語だと思います。

### 包含関係とする用法

「type annotation」は「type hint」（を付与する方法）の一種であり、annotation
構文を用いたものだとする用法があります。これは包含関係であり、質問者さんと同じく

> 型アノテーションより型ヒントの方が広い

という解釈です。

[![ベン図](https://i.stack.imgur.com/saTy9.png)](https://i.stack.imgur.com/saTy9.png)

現在、Python の文法に「annotation」が導入されて久しく、「type
annotation」という語の「annotation」はその構文を連想させることから、この用法があると思われます。

例:

> So, Type Annotations or Type Comments?
>
> —— [Python Type Checking](https://realpython.com/python-type-checking/#so-
> type-annotations-or-type-comments)

> It is not allowed for an argument or return value to have both a type
> annotation and a type comment.
>
> —— [PEP 484 – Type Hints](https://peps.python.org/pep-0484/#suggested-
> syntax-for-python-2-7-and-straddling-code)

> Type hints is a broader category than type annotations.
>
> —— [質問『Disambiguating Python terms, what is the difference between "type
> hint" vs "type
> annotations"?』への回答](https://softwareengineering.stackexchange.com/a/439915)

### 同等とする用法

上では「type annotation」の「annotation」が構文としての annotation
を連想させると述べましたが、もちろんより広い意味での「annotation（注釈）」を意図して書かれることも有るでしょう。この場合、「type
hint」と同じ意味で使われて、「type comment（型コメント）」も含むことになります。

[kunifさんの回答](https://ja.stackoverflow.com/a/94725/3054)ではこの用法が示されています。しかし、私はこれが唯一の正解では無く、あくまで用法の一つと考えます。

PEP における用法は定まらず、上で例に出したように、包含関係を前提としないと意味が通らない用例もあれば、どちらの解釈でも成り立つ記述もあります。全体的に
PEP では「type hint」と「type
annotation」の違いは熟慮されておらず、文脈に応じて理解する語として使われていると感じます（上で例として出した質問に[PEP
で定義されているというコメント](https://softwareengineering.stackexchange.com/questions/439888/disambiguating-
python-terms-what-is-the-difference-between-type-hint-vs-
type#comment965638_439888)も有るのですが、私にはそうは読めませんでした）。

### 将来

将来の可能性として、以下2点があります

  * Type comment の廃止が宣言され、type hint を付ける方法は annotation 構文のみになる
  * Annotation 構文の利用法は type hint に限ると宣言される

これら（特に前者）が行なわれると、上で述べた二つの用法の違いに意味は無くなります。

### 「型ヒントが付いていない」という表現

> たとえば、「以下のpower関数の戻りに型ヒントが付いていない」という表現は正しいでしょうか？

これは、上で述べたいずれの用法であっても正しいです。（ただし、示されているコード以外に[スタブファイル](https://peps.python.org/pep-0484/#stub-
files)が存在する可能性が有り、そこに型ヒントが付いているかも知れません）


CC BY-SA 4.0
2023-05-04T05:32:24.317
94736
2023-05-04T05:32:24.317
3054
94721
answer