Python Data Class:データを保存するためのより良い方法
Python データ クラスは、@dataclass
を持つ通常の Python クラスです。 デコレータ。データを保持するために特別に作成されます。 Python バージョン 3.7 以降、Python は dataclass
と呼ばれる組み込みモジュールを通じてデータ クラスを提供します。 .この記事では、通常の Python クラスに比べていくつかの利点があります。また、サンプル コードと、データ クラスで実行する可能性のあるいくつかの一般的な操作についても説明します。
目次
データ クラスを使用する利点
通常の Python クラスの代わりにデータ クラスを使用する必要があるのはなぜですか?まず、Python データ クラスが提供する利点をいくつか見てみましょう。
必要最小限のコード
@dataclass
デコレーターは、目に見えるコードを追加することなく、多くの機能をクラスに追加します。これにより、多くの便利な機能を提供しながら、データ クラスを非常にコンパクトにすることができます。必要なのは、データを保持するフィールドを定義することだけです。関数を定義する必要はありません。
比較
2 つの Python データ クラスを ==
と比較できます いわゆるダンダーメソッド __eq__ が自動的に実装されるためです。一般に、この特別なメソッドを実装する任意の Python オブジェクトを同じタイプの他のオブジェクトと比較できます。
データ クラスの出力
同様に、 __repr__
のため が実装されているため、データ クラスを出力して、その適切な表現を取得できます。これはデバッグに特に役立ちます。
データ クラスにはタイプ ヒントが必要
データ クラスは、Python が提供する新しい (っぽい) 型システムを中心に構築されています。型ヒントを使用すると、コードでバグや予期しない動作が発生する可能性が低くなります。基本的に、変数に格納する必要があるデータの型を宣言します。
Python データ クラスの例
動作中のデータ クラスの例を次に示します。
from dataclasses import dataclass @dataclass class Card: rank: str suit: str card1 = Card("Q", "hearts") card2 = Card("Q", "hearts") print(card1 == card2) # True print(card1.rank) # 'Q' print(card1) Card(rank='Q', suit='hearts')
デフォルト値
データ クラスにはデフォルト値を設定できます。デフォルト値の割り当ては、変数に値を割り当てるのと同じくらい簡単です。たとえば、Card クラスのデフォルト値をハートのクイーンにするには、次のようにします。
from dataclasses import dataclass @dataclass class Card: rank: str = 'Q' suit: str = 'hearts'
データ クラスを JSON に変換する
一般的な使用例は、適切に構造化されたデータ クラスを JSON に変換することです。たとえば、データをデータベースにエクスポートしたり、ブラウザに送信したりする場合です。ここで悪いニュース:データ クラスを JSON に変換する組み込みの方法がありません。
幸いなことに、このタスクを簡素化する dataclasses-json という Python パッケージがあります。ただし、追加のデコレータが必要です。 pip install コマンドまたは Pipenv などを使用して、できれば仮想環境内にパッケージをインストールする必要があります。例:
$ pip install dataclasses-json
パッケージの使用方法の例を次に示します:
from dataclasses import dataclass from dataclasses_json import dataclass_json @dataclass_json @dataclass class Card: rank: str = 'Q' suit: str = 'hearts' card = Card() print(card.to_json())
{"rank": "Q", "suit": "hearts"}
もう 1 つの方法は、Python 継承を使用し、JSONEncoder クラスから継承して独自のカスタム エンコーダーを作成することです。ここでの利点は、外部パッケージをインストールする必要がないことです。このブログ投稿でこれを行う方法を学ぶことができます。
学び続ける
- Python attrs パッケージには、ネイティブ Python データ クラスの高度なバージョンがあります
- Python.org の公式ドキュメント
- Python で複数の値を返す方法
Python