簡単な名前付きタプルを実装する

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、Python で簡単な名前付きタプルを実装する方法を学びます。名前付きタプルは、位置インデックスと属性名の両方を使ってデータにアクセスできるデータ構造であり、構造化データを扱うためのより直感的で読みやすい方法を提供します。

👀 プレビュー

$ python3 amedtuple.py
## 出力
NamedTuple(x=1, y=2)
2
1

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 組み込みの tuple クラスから継承する NamedTuple クラスを作成する方法
  • 必要な機能を実現するための __init____new____getitem__、および __repr__ メソッドを実装する方法
  • 位置インデックスと属性名の両方を使ってデータにアクセスする方法
  • 読みやすい形式で NamedTuple インスタンスを表現する方法

🏆 成果

このプロジェクトを完了すると、以下ができるようになります。

  • 名前付きタプルの概念とその利点を理解する
  • Python で簡単な名前付きタプルクラスを実装する
  • 名前付きタプルを使って、より直感的な方法で構造化データにアクセスして表現する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/variables_data_types("Variables and Data Types") python/DataStructuresGroup -.-> python/tuples("Tuples") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/variables_data_types -.-> lab-302735{{"簡単な名前付きタプルを実装する"}} python/tuples -.-> lab-302735{{"簡単な名前付きタプルを実装する"}} python/function_definition -.-> lab-302735{{"簡単な名前付きタプルを実装する"}} python/classes_objects -.-> lab-302735{{"簡単な名前付きタプルを実装する"}} python/inheritance -.-> lab-302735{{"簡単な名前付きタプルを実装する"}} end

名前付きタプルクラスを実装する

このステップでは、位置インデックスと属性名の両方を使ってデータにアクセスできる NamedTuple クラスを実装する方法を学びます。

  1. コードエディタで namedtuple.py ファイルを開きます。
  2. NamedTuple クラスを定義し、これは tuple クラスから継承する必要があります。
  3. __init__ メソッドでは、2つのパラメータを受け取ります。iterable(データ)と fields(データの名前)です。
  4. iterablefields をそれぞれインスタンス変数 self.dataself.fields として格納します。
  5. for ループを使って fields を反復処理し、各フィールドを NamedTuple インスタンスの属性として設定し、self.data から対応する値を割り当てます。
  6. __new__ メソッドを実装して、NamedTuple クラスの新しいインスタンスを作成します。このメソッドは tuple クラスの __new__ メソッドを呼び出し、新しいインスタンスを返す必要があります。
  7. __getitem__ メソッドを実装して、位置インデックスと属性名の両方を使ってデータにアクセスできるようにします。インデックスが文字列の場合、self.fields 内の対応するフィールドのインデックスを見つけ、self.data から値を返します。
  8. __repr__ メソッドを実装して、NamedTuple インスタンスの文字列を NamedTuple(x=1, y=2) の形式で返します。ここで、xy はフィールド名であり、12 は対応する値です。

完成した 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 クラスをテストします。

  1. 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
  1. namedtuple.py ファイルを保存します。
  2. ターミナルまたはコマンドプロンプトを開き、namedtuple.py ファイルが含まれるディレクトリに移動します。
  3. 次のコマンドを実行して、スクリプトを実行します。
python3 namedtuple.py

次の出力が表示されるはずです。

NamedTuple(x=1, y=2)
2
1

これは、NamedTuple クラスが期待通りに機能しており、位置インデックスと属性名の両方を使ってデータにアクセスできることを示しています。

おめでとうございます!Python で簡単な名前付きタプルを成功裏に実装しました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabExでさらに多くの実験を行って練習してください。