Python のデータクラス

Vaibhav Vaibhav 2021年12月4日
Python のデータクラス

Python またはその他のプログラミング言語にある一般的なクラスは、エンティティを表すように設計されています。それらはエンティティを表すため、多くの関数、ロジック、および属性で満たされ、各関数は特定のタスクを実行し、クラス属性はクラス関数を使用して操作されます。

一般的なクラスとは別に、さらに別のタイプのクラス、つまりデータクラスがあります。この記事では、Python だけでなく他のプログラミング言語にも見られるデータクラスについて説明します。

Python DataClass

これらの通常のクラスとは異なり、データクラスはエンティティの状態を格納することを目的としています。それらは多くのロジックを含んでいません。それらは、オブジェクトまたはエンティティの統計を表すいくつかのデータを格納します。

例を挙げて、データクラスをよりよく理解しましょう。たとえば、衣料品店のショッピングカートの動作を模倣しようとするプログラムを作成しているとします。ショッピングカートには商品や洋服が入っています。服には、帽子帽子下着の 3 種類があるとします。すべての性別がすべての布を着用できるわけではないため、布が製造されている性別に関する情報もあります。男性女性ニュートラル(どちらも着用可能)の 3つのカテゴリのみを考えてみましょう。すべての製品には、名前、価格、サイズ、および製造元の会社があります。

これで、ショッピングカートを模倣するプログラムを作成する必要がある場合、ShoppingCartProduct の 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__ 関数を実装することもできます。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

関連記事 - Python Class

関連記事 - Python Dataclass