PYTHON MEBY

Pythonで名前付きタプルを使う(collections.namedtuple, typing.NamedTuple (Python 3.6以降))

この記事ではPythonで名前付きタプルを使う方法を解説します。collections.namedtupleとtyping.NamedTupleの使い分けや利点、そして実践的なサンプルコードを紹介します。

目次

collections.namedtuple

Pythonの標準ライブラリ`collections`モジュールにある`namedtuple`は、名前付きタプルを作成するための関数です。タプルの各要素に名前をつけることで、コードの可読性と保守性を向上させることができます。

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p)  # Output: Point(x=10, y=20)
print(p.x) # Output: 10
print(p.y) # Output: 20

第一引数はクラス名、第二引数はフィールド名のリストです。

namedtupleで作成されたクラスは、タプルと同様にインデックスアクセスも可能です。

print(p[0]) # Output: 10
print(p[1]) # Output: 20

typing.NamedTuple

Python 3.6以降では、`typing`モジュールに`NamedTuple`が追加されました。`namedtuple`と同様に名前付きタプルを作成できますが、型ヒントを指定できる点が大きな違いです。

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(10, 20)
print(p)  # Output: Point(x=10, y=20)
print(p.x) # Output: 10
print(p.y) # Output: 20

型ヒントを指定することで、静的解析ツールによるエラー検出が可能になり、より安全なコードを作成できます。

NamedTupleは、namedtupleと比べて、より柔軟で高度な機能を提供します。例えば、デフォルト値を指定したり、メソッドを追加したりできます。

使い分け

`namedtuple`はシンプルな名前付きタプルを作成するのに適しており、型ヒントを必要としない場合に使用します。一方、`NamedTuple`は型ヒントが必要な場合や、より高度な機能が必要な場合に使用します。型安全性を重視するならば、`NamedTuple`を使うべきです。

利点

名前付きタプルを使う利点は、コードの可読性と保守性の向上です。タプルの各要素に名前をつけることで、コードの意味が明確になり、デバッグや修正が容易になります。また、型ヒントを使用することで、ランタイムエラーを事前に防ぐことができます。

サンプルコード

より実践的な例として、ユーザー情報を表す名前付きタプルを考えてみましょう。

from typing import NamedTuple

class User(NamedTuple):
    id: int
    name: str
    email: str

user = User(1, 'John Doe', 'john.doe@example.com')
print(user.name)  # Output: John Doe
print(user.email) # Output: john.doe@example.com

関連記事