<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「型ヒント」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/%e5%9e%8b%e3%83%92%e3%83%b3%e3%83%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sat, 10 Jan 2026 00:21:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「型ヒント」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】mypyを使用した型チェックの方法</title>
		<link>https://tech.nkhn37.net/python-mypy-type-annotation-check/</link>
					<comments>https://tech.nkhn37.net/python-mypy-type-annotation-check/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sun, 20 Aug 2023 20:00:00 +0000</pubDate>
				<category><![CDATA[mypy]]></category>
		<category><![CDATA[disallow_untyped_defs]]></category>
		<category><![CDATA[mypy.ini]]></category>
		<category><![CDATA[型アノテーション]]></category>
		<category><![CDATA[型ヒント]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=8780</guid>

					<description><![CDATA[Pythonの型ヒントを利用して型チェックをすることができるmypyの使い方について解説します。 Pythonの型ヒント（型アノテーション）とmypy Pythonでは、バージョン3.5から型ヒント（型アノテーション）が [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonの型ヒントを利用して型チェックをすることができる<span class="marker"><strong>mypyの使い方</strong></span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">Pythonの型ヒント（型アノテーション）とmypy</h2>



<p class="wp-block-paragraph">Pythonでは、バージョン3.5から<span class="marker"><strong>型ヒント（型アノテーション）</strong></span>がサポートされています。型ヒントの基本については「<a href="https://tech.nkhn37.net/python-type-annotation-basic/" data-type="link" data-id="https://tech.nkhn37.net/python-type-annotation-basic/" target="_blank" rel="noreferrer noopener">型ヒント（変数・関数の型アノテーション）の基本</a>」でまとめていますので興味があれば参考にしてください。</p>



<p class="wp-block-paragraph">Pythonの型ヒントは単なる注釈であり、プログラム実行に制約を加えません。Pythonは変数や関数の型アノテーションを強制もしません。</p>



<p class="wp-block-paragraph">Pythonは動的型付け言語であり、型を明示する必要がないため、プログラミング初学者にとって学習しやすいという利点があります。しかし、変数や関数の誤った使い方によってバグが生じることもあります。</p>



<p class="wp-block-paragraph">型ヒントを使用する場合、適切な型を使用しているかどうか型チェックをしたくなることがあるでしょう。Pythonで型チェックをしたい場合、<span class="marker"><a rel="noreferrer noopener" href="https://mypy.readthedocs.io/en/stable/" data-type="link" data-id="https://mypy.readthedocs.io/en/stable/" target="_blank"><strong>mypy</strong></a></span>というライブラリを使用できます。mypyは、型ヒントを基にプログラムの実行前に型のチェックをするサードパーティ製のライブラリです。</p>



<p class="wp-block-paragraph">この記事では、<span class="marker"><strong>mypyでPythonコードの型チェックをする方法</strong></span>を紹介します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">mypyを使用した型チェック</h2>



<h3 class="wp-block-heading jinr-heading d--bold">mypyのインストール</h3>



<p class="wp-block-paragraph">mypyを使用するには以下のようにpipでインストールしてください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">pip install mypy</pre>



<p class="wp-block-paragraph">記事執筆時点では、mypyはPython3.8以降を必要としていますが、最新の情報は公式ドキュメントの<a rel="noreferrer noopener" href="https://mypy.readthedocs.io/en/stable/getting_started.html" data-type="link" data-id="https://mypy.readthedocs.io/en/stable/getting_started.html" target="_blank">Getting started</a>のページを確認するようにしてください。</p>



<h3 class="wp-block-heading jinr-heading d--bold">mypyの基本的な使い方</h3>



<h4 class="wp-block-heading jinr-heading d--bold">mypyの実行方法</h4>



<p class="wp-block-paragraph">mypyは、コマンドラインインターフェースで以下のように実行することができます。program_name.pyの部分にはチェック対象のプログラムを指定してください。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">mypy program_name.py</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">以降では、簡単な例を使ってmypyの型チェックの実行結果を見てきます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">変数の型チェック</h4>



<p class="wp-block-paragraph">変数の使用に関する型チェックをする場合の例について見てみます。</p>



<h5 class="wp-block-heading jinr-heading d--bold">型チェックが問題ない場合</h5>



<p class="wp-block-paragraph">mypyを実行した際に変数の型チェックに問題がない場合は、以下のようにSuccessと表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># intの型アノテーション
x: int = 10
print(x)

# 正しい型(int)を代入する
x = 20
print(x)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[mypy実行結果]
Success: no issues found in 1 source file</pre>



<p class="wp-block-paragraph">上記例では、int型で定義しているxという変数をintとして扱っているため問題はありません。</p>



<h5 class="wp-block-heading jinr-heading d--bold">型チェックに問題がある場合</h5>



<p class="wp-block-paragraph">mypyを実行した際に変数の型チェックに問題がある場合は、以下のようにエラーが表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># intの型アノテーション
x: int = 10
print(x)

# 異なる型(str)を代入する
x = "Test"
print(x)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[mypy実行結果]
variable_error.py:6: error: Incompatible types in assignment (expression has type "str", variable has type "int")  [assignment
]
Found 1 error in 1 file (checked 1 source file)</pre>



<p class="wp-block-paragraph">上記例では、int型で定義しているxという変数に、str型の値を代入しようとしているためエラーが出力されています。このように、変数の使用に関する型チェックが可能です。</p>



<h4 class="wp-block-heading jinr-heading d--bold">関数の型チェック</h4>



<p class="wp-block-paragraph">関数の使用に関する型チェックをする場合の例について見てみます。</p>



<h5 class="wp-block-heading jinr-heading d--bold">型チェックが問題ない場合</h5>



<p class="wp-block-paragraph">mypyを実行した際に関数の型チェックに問題がない場合は、以下のようにSuccessと表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def func_annotation(x: int, y: int) -> int:
    return x * y


if __name__ == "__main__":
    val1 = 10
    val2 = 3
    
    # 正しい型で使用する
    print(func_annotation(val1, val2))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[mypy実行結果]
Success: no issues found in 1 source file</pre>



<p class="wp-block-paragraph">上記例では、関数の型アノテーションに従った値を引数として指定しているため問題はありません。</p>



<h5 class="wp-block-heading jinr-heading d--bold">型チェックに問題がある場合</h5>



<p class="wp-block-paragraph">mypyを実行した際に関数の型チェックに問題がある場合は、以下のようにエラーが表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def func_annotation(x: int, y: int) -> int:
    return x * y


if __name__ == "__main__":
    val1 = "test"
    val2 = 3

    # 引数xを誤った型(str)で使用する
    print(func_annotation(val1, val2))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[mypy実行結果]
func_error.py:8: error: Argument 1 to "func_annotation" has incompatible type "str"; expected "int"  [arg-type]
Found 1 error in 1 file (checked 1 source file)</pre>



<p class="wp-block-paragraph">上記例では、int型で定義しているxという引数に、str型の値を代入しようとしているためエラーが出力されています。このように、関数の使用に関する型チェックが可能です。</p>



<h4 class="wp-block-heading jinr-heading d--bold">設定ファイルによるカスタマイズ</h4>



<p class="wp-block-paragraph">mypyは、mypy.iniという設定ファイルで実行に関する設定を行えます。mypy.iniファイルは、コードと同じ階層か、プロジェクトルートに配置します。mypy.iniの参照順序は、公式ドキュメントの<a rel="noreferrer noopener" href="https://mypy.readthedocs.io/en/stable/config_file.html#the-mypy-configuration-file" data-type="link" data-id="https://mypy.readthedocs.io/en/stable/config_file.html#the-mypy-configuration-file" target="_blank">設定ファイルのページ</a>に記載があります。また、設定ファイルとしては、mypi.iniの代わりにpyproject.tomlも使用できます。</p>



<p class="wp-block-paragraph">mypy.iniでは、以下のような内容を設定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[mypy]
warn_return_any = True
warn_unused_configs = True
disallow_untyped_defs = True</pre>



<p class="wp-block-paragraph">[mypy]の部分はmypyのグローバル設定となっており、各設定項目にはTrueまたはFalseを指定します。</p>



<p class="wp-block-paragraph">特定のパッケージに設定を適用させたい場合、[mypy-mycode.foo.*]のようなブロックを作成し、その中に設定を記述することができます。この設定は、mycode.fooパッケージ内に適用されます。mypy.iniの設定例は、公式ドキュメントの<a rel="noreferrer noopener" href="https://mypy.readthedocs.io/en/stable/config_file.html#example-mypy-ini" data-type="link" data-id="https://mypy.readthedocs.io/en/stable/config_file.html#example-mypy-ini" target="_blank">例のページ</a>に記載がありますので参考にしてください。</p>



<p class="wp-block-paragraph"><strong>warn_return_any</strong>は、関数がAny型持つと推測される値を返すたびにエラーを通知します。また、<strong>warn_unsed_configs</strong>はmypyが使用していない設定オプションを使用していることを通知します。これらの設定については、公式ドキュメントの例に詳細な情報が掲載されています。</p>



<p class="wp-block-paragraph"><strong>disallow_untyped_defs</strong>は、型ヒントを設定していない関数定義がある場合にエラーを出力します。例えば、disallow_untyped_defs=Trueとして、以下のような型ヒントの不足した関数をチェックするとエラーが表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># 型アノテーションを指定する場合
# アノテーションの指定が不十分
def func_annotation(x: int, y):
    return x * y


if __name__ == "__main__":
    val1 = "test"
    val2 = 3
    print(func_annotation(val1, val2))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【mypy実行結果】
PS D:\PycharmProjects\python-tech-sample-source\python-libraries\mypy\basics> mypy .\func_error_not_enough_hint.py
func_error_not_enough_hint.py:3: error: Function is missing a return type annotation  [no-untyped-def]
func_error_not_enough_hint.py:3: error: Function is missing a type annotation for one or more arguments  [no-untyped-def]
func_error_not_enough_hint.py:10: error: Argument 1 to "func_annotation" has incompatible type "str"; expected "int"  [arg-typ
e]
Found 3 errors in 1 file (checked 1 source file)</pre>



<p class="wp-block-paragraph">上記の例では、yの型アノテーションが不足しているエラーと、返り値の型アノテーションが不足しているエラーが表示されています。disallow_untyped_defsを設定しないか、Falseに設定する場合、これらのエラーは表示されません。</p>



<p class="wp-block-paragraph">関数の型アノテーションを正確に指定したい場合は、disallow_untyped_defs=Trueに設定すると良いでしょう。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Pythonの型ヒントを利用して型チェックをすることができる<span class="marker"><strong>mypyの使い方</strong></span>について解説しました。</p>



<p class="wp-block-paragraph">mypyは、型ヒントを基にプログラムの実行前に型のチェックをすることができるサードパーティ製のライブラリです。この記事では、変数と関数の型チェックやmypy.iniという設定ファイルについて紹介しました。</p>



<p class="wp-block-paragraph">Pythonの型ヒントは、単なる注釈であるため、プログラム実行に制約を加えません。Pythonは変数や関数の型アノテーションを強制しないため自由度が高いです。型ヒントを設定する場合、型のチェックを行いたくなることがあると思います。このような場合にはmypyの活用を検討する価値があると思います。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph"><code>mypy</code> の公式ドキュメントは<a href="https://mypy.readthedocs.io/en/stable/index.html" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/mypy" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-mypy-type-annotation-check/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python】型ヒント（変数・関数の型アノテーション）の基本</title>
		<link>https://tech.nkhn37.net/python-type-annotation-basic/</link>
					<comments>https://tech.nkhn37.net/python-type-annotation-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Sat, 19 Aug 2023 20:00:00 +0000</pubDate>
				<category><![CDATA[アノテーション]]></category>
		<category><![CDATA[mypy]]></category>
		<category><![CDATA[NetType]]></category>
		<category><![CDATA[typing]]></category>
		<category><![CDATA[__annotations__]]></category>
		<category><![CDATA[カスタム型]]></category>
		<category><![CDATA[型アノテーション]]></category>
		<category><![CDATA[型エイリアス]]></category>
		<category><![CDATA[型ヒント]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=8765</guid>

					<description><![CDATA[Pythonにおける型ヒント（変数・関数の型アノテーション）の基本について解説します。 型ヒント（変数・関数の型アノテーション） プログラミング言語には、静的型付け言語や動的型付け言語といったものがあります。前者の静的型 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Pythonにおける<span class="marker"><strong>型ヒント（変数・関数の型アノテーション）の基本</strong></span>について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">型ヒント（変数・関数の型アノテーション）</h2>



<p class="wp-block-paragraph">プログラミング言語には、<span class="marker"><strong>静的型付け言語</strong></span>や<span class="marker"><strong>動的型付け言語</strong></span>といったものがあります。前者の静的型付け言語は、変数宣言の際に型の指定が必要でコンパイル時などにチェックが行われます。一方で後者の動的型付け言語は、変数に型の指定は不要で実行時に変数の型が定まります。</p>



<p class="wp-block-paragraph">Pythonは、<span class="marker"><strong>動的型付け言語</strong></span>です。そのため、変数や関数の宣言時には特に型の指定をすることなくプログラミング可能です。C/C++やJava等を先に勉強をしてPythonに入ると型を指定しないことに違和感を持つ人もいるかもしれません。</p>



<p class="wp-block-paragraph">Pythonではバージョン3.5から<span class="marker"><strong>型ヒント</strong></span>がサポートされており、変数や関数に型アノテーションとして型情報を指定できるようになっています。</p>



<p class="wp-block-paragraph">本記事では、<span class="marker"><strong>Pythonの型ヒント（変数・関数の型アノテーション）について基本的な使い方</strong></span>を紹介します。</p>



<h3 class="wp-block-heading jinr-heading d--bold">型ヒント（型アノテーション）の使い方</h3>



<h4 class="wp-block-heading jinr-heading d--bold">変数の型アノテーション</h4>



<p class="wp-block-paragraph">変数に型アノテーションをつける場合には、以下のように変数の後ろに「<span class="marker"><strong>: 型</strong></span>」というような形で指定します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">x: int = 10
y: float = 0.25
s: str = "テスト"

print(x)
print(y)
print(s)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
10
0.25
テスト</pre>



<p class="wp-block-paragraph">上記例では、xはint型、yはfloat型、sはstr型であることを示しています。</p>



<h4 class="wp-block-heading jinr-heading d--bold">リスト・タプル・辞書の型アノテーション</h4>



<p class="wp-block-paragraph">リスト・タプル・辞書の型アノテーションの方法としては、Pythonバージョンによって少し使い方が異なっています。</p>



<h5 class="wp-block-heading jinr-heading d--bold">typingモジュールから型をインポート</h5>



<p class="wp-block-paragraph">Pythonの型ヒントに関するモジュールは<span class="marker"><strong>typing</strong></span>モジュールです。以下のようにtypingモジュールからList, Tuple, Dictという型をインポートすることで、リスト・タプル・辞書の型アノテーションが可能です。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from typing import Dict, List, Tuple

value_list: List[int] = [1, 2, 3, 4, 5]
value_tuple: Tuple[int, str] = (1, "abc")
value_dict: Dict[int, str] = {1: "a", 2: "b", 3: "c"}

print(value_list)
print(value_tuple)
print(value_dict)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
[1, 2, 3, 4, 5]
(1, 'abc')
{1: 'a', 2: 'b', 3: 'c'}</pre>



<p class="wp-block-paragraph">リストでは、List[型]のようにリストに含まれる型を指定します。Pythonのリストでは複数の型を含めることができますが、型アノテーションでは複数の型を指定することができません。</p>



<p class="wp-block-paragraph">タプルの場合は、リストとは少し違いタプルが含む要素の型をTuple[型, 型, &#8230;]のように列挙して指定します。</p>



<p class="wp-block-paragraph">辞書の場合は、Dict[キーの型, 値の型]という形で指定します。</p>



<h5 class="wp-block-heading jinr-heading d--bold">Python3.9以降 (List, Tuple, Dictは非推奨)</h5>



<p class="wp-block-paragraph"><span class="marker"><strong>Python3.9以降</strong></span>では、typingモジュールからListやTuple、Dictをインポートしなくても以下のように記載できるようになっています。なお、List, Tuple, Dictは3.9からは非推奨(deprecated)になっています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># Python 3.9以降
# List, Tuple, Dictは非推奨
value_list: list[int] = [1, 2, 3, 4, 5]
value_tuple: tuple[int, str] = (1, "abc")
value_dict: dict[int, str] = {1: "a", 2: "b", 3: "c"}

print(value_list)
print(value_tuple)
print(value_dict)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
[1, 2, 3, 4, 5]
(1, 'abc')
{1: 'a', 2: 'b', 3: 'c'}</pre>



<p class="wp-block-paragraph">typingモジュールからインポートする必要がなくなり、シンプルに記述できるようになっています。</p>



<h4 class="wp-block-heading jinr-heading d--bold">型エイリアス</h4>



<p class="wp-block-paragraph">ある型に対して別の型名を使用することを<span class="marker"><strong>型エイリアス</strong></span>と言います。エイリアスとは「別名」という意味です。型エイリアスを使う場合には以下のように使用します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># 型エイリアスの作成
Vector = list[float]

new_vector: Vector = [1.0, 2, 0, 3.0]
print(new_vector)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
[1.0, 2, 0, 3.0]</pre>



<p class="wp-block-paragraph">上記例では、list[float]というfloat型のリストの別名としてVectorとして定義しています。</p>



<p class="wp-block-paragraph">このように型エイリアスを使うと、型アノテーションの表記をシンプルにすることができますし、型が持つ意味(上記例だとfloatの値を持つベクトル)を明確に分かるようにすることが可能です。</p>



<h4 class="wp-block-heading jinr-heading d--bold">新しいカスタム型の作成</h4>



<p class="wp-block-paragraph">異なる新しいカスタム型を作成するには、以下のようにtypingモジュールの<span class="marker"><strong>NewType</strong></span>を用いて新しい型を定義します。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">from typing import NewType

# 新しいUserId型を作る
UserId = NewType("UserId", int)

# UserId型の変数を用意
test_id = UserId(12345)
print(test_id)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
12345</pre>



<p class="wp-block-paragraph">上記例では、UserIdという新しい型を定義しています。とはいっても実体はint型です。UserId型では、intの全ての演算を行うことができます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">関数の型アノテーション</h4>



<p class="wp-block-paragraph">関数に型アノテーションをつける場合には、以下のような形で指定します。</p>



<ul class="wp-block-list jinr-list">
<li>引数：変数の後ろに「<span class="marker"><strong>: 型</strong></span>」というような形で指定</li>



<li>返り値：「<span class="marker"><strong>-&gt; 型</strong></span>」というような形で指定</li>
</ul>



<p class="wp-block-paragraph">具体的な使い方の例を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># 型アノテーションを指定しない場合
def func(x, y):
    return x * y


# 型アノテーションを指定する場合
def func_annotation(x: int, y: int) -> int:
    return x * y


if __name__ == "__main__":
    val1 = 10
    val2 = 20
    print(func(val1, val2))
    print(func_annotation(val1, val2))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
200
200</pre>



<p class="wp-block-paragraph">関数funcは関数アノテーションを使用していない通常の定義方法で、関数func_annotationは、関数アノテーションを使用している例です。実行する内容、結果はどちらも同じです。</p>



<p class="wp-block-paragraph">上記func_annotationの例では、int型の引数xとyを受け取って返却値としてint型を返すことを明示しています。型の部分には、floatやstr等を使用することができます。</p>



<h4 class="wp-block-heading jinr-heading d--bold">__annotations__属性</h4>



<p class="wp-block-paragraph">関数アノテーションを使用する場合は、以下のように<span class="marker"><strong>__annotations__</strong></span>属性で型アノテーションの情報を参照することができます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""># 型アノテーションを指定する場合
def func_annotation(x: int, y: int) -> int:
    return x * y


if __name__ == "__main__":
    print(func_annotation.__annotations__)</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">{'x': &lt;class 'int'>, 'y': &lt;class 'int'>, 'return': &lt;class 'int'>}</pre>



<p class="wp-block-paragraph">上記のように引数や返却値の型を確認できます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">Pythonの型ヒントはただの注釈でしかない</h3>



<p class="wp-block-paragraph">これまで型ヒントについて紹介してきましたが、<span class="marker"><strong>型ヒントはただの注釈</strong></span>でしかないことを覚えておく必要があります。型ヒントを指定してもプログラム実行に制約がかかるわけではありませんし、Pythonは変数や関数の型アノテーションを強制もしません。</p>



<p class="wp-block-paragraph">例えば、以下のようにした場合でも普通に実行できます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def func_annotation(x: int, y: int) -> int:
    return x * y


if __name__ == "__main__":
    # 型アノテーションに従った使用方法
    val1 = 10
    val2 = 20
    print(func_annotation(val1, val2))

    # Pythonの型ヒントはただの注釈でしかないため強制力はない
    val1 = "test"
    val2 = 3
    print(func_annotation(val1, val2))</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果】
200
testtesttest</pre>



<p class="wp-block-paragraph">上記例での二つ目の使い方では、xに該当する位置に&#8221;test&#8221;というstrの変数を指定しており、型アノテーションには反しています。この場合でも、func_annotation内で定義している「x * y」は評価できるため、結果は「testtesttest」と文字列を3回繰り返す結果となっています。</p>



<p class="wp-block-paragraph">例えば、関数型プログラミング言語のHaskellには強力な型システムがあり、本記事で紹介したような型アノテーションや型エイリアス、カスタム型の定義に相当することができます。Haskellでは、厳密に型の定義に従う必要があるため、上記例のようなアノテーションに従わない関数の使い方は許容されません。</p>



<p class="wp-block-paragraph">なお、Pythonで型チェックをするような場合には、<span class="marker"><strong>mypy</strong></span>というモジュールを使用することができます。mypyについては「<a href="https://tech.nkhn37.net/python-mypy-type-annotation-check/" data-type="link" data-id="https://tech.nkhn37.net/python-mypy-type-annotation-check/" target="_blank" rel="noreferrer noopener">mypyを使用した型チェックの方法</a>」にまとめていますので興味があれば参考にしてください。</p>



<p class="wp-block-paragraph">型ヒントはPythonにおいては必須のものではありませんが、利用者に変数や関数の使い方を明示する意味で使用を検討するのもよいでしょう。プロジェクト単位で使用する/しないを明確に決めて使うようにするとよいと思います。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">Pythonにおける<span class="marker"><strong>型ヒント（変数・関数の型アノテーション）の基本</strong></span>について解説しました。</p>



<p class="wp-block-paragraph">Pythonではバージョン3.5から型ヒントがサポートされており、変数や関数に型アノテーションとして型の情報を指定できるようになっています。本記事では、変数や関数での基本的な指定方法について紹介しています。</p>



<p class="wp-block-paragraph">注意点として<span class="marker"><strong>型ヒントはただの注釈</strong></span>でしかないことを覚えておく必要があります。型ヒントを指定してもプログラム実行に制約がかかるわけではありませんし、Pythonは変数や関数の型アノテーションを強制もしません。</p>



<p class="wp-block-paragraph">型ヒントはPythonにおいては必須のものではありませんが、利用者に変数や関数の使い方を明示する意味で使用を検討するのもよいでしょう。プロジェクト単位で使用する/しないを明確に決めて使うようにするとよいかなと思います。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">型ヒントに関する公式ドキュメントは<a href="https://docs.python.org/ja/3/library/typing.html" target="_blank" rel="noreferrer noopener">こちら</a>を参照してください。</p>
</div>
		</div></section>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p class="wp-block-paragraph">上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-basic/annotation" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-type-annotation-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-06-26 08:11:06 by W3 Total Cache
-->