Python のデータクラス
Python またはその他のプログラミング言語にある一般的なクラスは、エンティティを表すように設計されています。それらはエンティティを表すため、多くの関数、ロジック、および属性で満たされ、各関数は特定のタスクを実行し、クラス属性はクラス関数を使用して操作されます。
一般的なクラスとは別に、さらに別のタイプのクラス、つまりデータクラスがあります。この記事では、Python だけでなく他のプログラミング言語にも見られるデータクラスについて説明します。
Python DataClass
これらの通常のクラスとは異なり、データクラスはエンティティの状態を格納することを目的としています。それらは多くのロジックを含んでいません。それらは、オブジェクトまたはエンティティの統計を表すいくつかのデータを格納します。
例を挙げて、データクラスをよりよく理解しましょう。たとえば、衣料品店のショッピングカートの動作を模倣しようとするプログラムを作成しているとします。ショッピングカートには商品や洋服が入っています。服には、帽子
、帽子
、下着
の 3 種類があるとします。すべての性別がすべての布を着用できるわけではないため、布が製造されている性別に関する情報もあります。男性
、女性
、ニュートラル(どちらも着用可能)
の 3つのカテゴリのみを考えてみましょう。すべての製品には、名前、価格、サイズ、および製造元の会社があります。
これで、ショッピングカートを模倣するプログラムを作成する必要がある場合、ShoppingCart
と Product
の 2つのクラスを作成できます。ShoppingCart
クラスは、商品の追加と削除、商品数の操作、カート内にある商品の追跡など、すべてのロジックを保持します。また、単一の商品は Product
クラスで表されます。Product
はデータクラスであり、単に製品を表します。
Product
クラスは次のようになります。
class Product:
"""
A class representing a product
"""
def __init__(self, name, price, size, company, wearType, gender):
self.name = name
self.price = price
self.size = size
self.company = company
self.wearType = wearType
self.gender = gender
def __hash__(self):
"""
Returns a hash code for the class object
"""
return hash(
(self.name, self.price, self.size, self.company, self.wearType, self.gender)
)
def __eq__(self, other):
"""
Checks weather two objects are equal or not
"""
if not isinstance(other, Product):
return False
else:
return (
self.name,
self.price,
self.size,
self.company,
self.wearType,
self.gender,
) == (
other.name,
other.price,
other.size,
other.company,
other.wearType,
other.gender,
)
ご覧のとおり、Product
クラスにはロジックがありません。それがするのは製品を表すことだけです。これはデータクラスがどのように見えるかであり、属性と最小限のロジックだけです。
データクラスをハッシュ可能にする場合は、実装されている 2つの関数が必要です。クラスがハッシュ可能である場合、そのオブジェクトはディクショナリのキーとして使用でき、固定値にマップできます。値をマップするにはハッシュコードが必要になるため、これら 2つの関数は不可欠です。
クラスオブジェクトの文字列表現を返す特定のメソッドである __repr__
関数を実装することもできます。
関連記事 - Python Class
- Python クラス オブジェクトを JSON にシリアル化する
- Python クラス ファクトリ
- Python クラスの等価性
- Python ジェネレーター クラス
- Python でのデータ クラスの継承
- Python 抽象プロパティ