Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

NamedTupleとはなにか?Enumとはなにか?

背景

使わなくても書けるが、PythonにはNamedTupleやTupleなど”型”に対するサポートが手厚くなっています(所謂、型ヒント)。

Pythonが初めてのプログラミング言語で、かつ中級者程度になってくると グローバル変数などを多用し、型を意識せずに、コーディングをしがちです。それにより、予期せぬ変数代入などを招く恐れがあります。

今回は、知ってるようで知らないPythonにおけるNamedTuple・Enumについて紹介します。

NamedTupleとはなにか?

意外と知られていない・使われていないのがNamedTupleです。

何が嬉しいのか?

  • NamedTupleはTupleをより使いやすくしたものです
  • tupleのように再代入できません
  • 再代入リスクを避けつつ、明示的な記法によって開発しやすくなります

サンプルコード

from typing import NamedTuple

# NamedTupleを使ってクラスを定義
class User(NamedTuple):
    name: str
    age : int
    sex : str

user = User(name='John', age=20, sex='male')

print(user.name) # 20

user.age = 30 # 再代入不可

# Tupleを使った場合
user = ('John', 20, 'male')
print(user[1]) # 20, 再代入不可は実現できる。ただし,"1"のように呼び出しづらくなる

Enumとはなにか?

NamedTupleに似たような機能で、Enumがあります。

何が嬉しいのか?

  • 固定値で与えるようなものをまとめて定義し、かつ再代入ができないので管理を楽にすることができる
  • KeyからValueにアクセスできる点、ValueからKeyにアクセスできる点が魅力

サンプルコード

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color.RED.value) # valueを呼び出せる
print(Color.RED.name) # nameを呼び出せる
print(Color(1)) # valueからKeyを呼び出せる
print(Color(1) == Color.RED) # 条件文を書ける
Color.RED.value = 10 # 再代入は不可

まとめ

NamedTupleEnumも再代入が不可という点は共通です。 これらの機能を知っていれば、

  • これまで
  • これから
    • NamedTupleやEnumを使った変数管理による再代入リスクを無くす。かつ、既存のTupleなどに比べて可読性の向上が図れる

ということができるようになります。