はじめに
このプロジェクトでは、Python で簡単な名前付きタプルを実装する方法を学びます。名前付きタプルは、位置インデックスと属性名の両方を使ってデータにアクセスできるデータ構造であり、構造化データを扱うためのより直感的で読みやすい方法を提供します。
👀 プレビュー
## 出力
🎯 タスク
このプロジェクトでは、以下を学びます。
- 組み込みの
tupleクラスから継承するNamedTupleクラスを作成する方法 - 必要な機能を実現するための
__init__、__new__、__getitem__、および__repr__メソッドを実装する方法 - 位置インデックスと属性名の両方を使ってデータにアクセスする方法
- 読みやすい形式で
NamedTupleインスタンスを表現する方法
🏆 成果
このプロジェクトを完了すると、以下ができるようになります。
- 名前付きタプルの概念とその利点を理解する
- Python で簡単な名前付きタプルクラスを実装する
- 名前付きタプルを使って、より直感的な方法で構造化データにアクセスして表現する
NamedTuple クラスを実装する
このステップでは、位置インデックスと属性名の両方を使ってデータにアクセスできる NamedTuple クラスを実装する方法を学びます。
- コードエディタで
namedtuple.pyファイルを開きます。 NamedTupleクラスを定義し、これはtupleクラスから継承する必要があります。__init__メソッドでは、2 つのパラメータを受け取ります。iterable(データ)とfields(データの名前)です。iterableとfieldsをそれぞれインスタンス変数self.dataとself.fieldsとして格納します。forループを使ってfieldsを反復処理し、各フィールドをNamedTupleインスタンスの属性として設定し、self.dataから対応する値を割り当てます。__new__メソッドを実装して、NamedTupleクラスの新しいインスタンスを作成します。このメソッドはtupleクラスの__new__メソッドを呼び出し、新しいインスタンスを返す必要があります。__getitem__メソッドを実装して、位置インデックスと属性名の両方を使ってデータにアクセスできるようにします。インデックスが文字列の場合、self.fields内の対応するフィールドのインデックスを見つけ、self.dataから値を返します。__repr__メソッドを実装して、NamedTupleインスタンスの文字列をNamedTuple(x=1, y=2)の形式で返します。ここで、xとyはフィールド名であり、1と2は対応する値です。
完成した NamedTuple クラスは次のようになります。
class NamedTuple(tuple):
def __init__(self, iterable, fields):
self.data = iterable
self.fields = tuple(fields)
for i, attr in enumerate(self.fields):
setattr(self, attr, self.data[i])
def __new__(cls, iterable, fields):
return super().__new__(cls, iterable)
def __getitem__(self, index):
if isinstance(index, str):
index = self.fields.index(index)
return self.data[index]
def __repr__(self):
return f"NamedTuple({', '.join(f'{field}={self[field]}' for field in self.fields)})"
NamedTuple クラスをテストする
このステップでは、前のステップで実装した NamedTuple クラスをテストします。
namedtuple.pyファイルの末尾に、次のコードを追加します。
if __name__ == "__main__":
## 例の使用法:
testData = [1, 2]
fields = ["x", "y"]
t = NamedTuple(testData, fields)
print(t) ## 出力:NamedTuple(x=1, y=2)
print(t[1]) ## 出力:2
print(t.x) ## 出力:1
namedtuple.pyファイルを保存します。- ターミナルまたはコマンドプロンプトを開き、
namedtuple.pyファイルが含まれるディレクトリに移動します。 - 次のコマンドを実行して、スクリプトを実行します。
python3 namedtuple.py
次の出力が表示されるはずです。
NamedTuple(x=1, y=2)
2
1
これは、NamedTuple クラスが期待通りに機能しており、位置インデックスと属性名の両方を使ってデータにアクセスできることを示しています。
おめでとうございます!Python で簡単な名前付きタプルを成功裏に実装しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。



