ホーム >  Python >  【Python】データクラスを使って引数を簡単にする【dataclass】

投稿日:

【Python】データクラスを使って引数を簡単にする【dataclass】

Python

dataclassは、データを格納するために特化したPythonの記述方法です。

データクラス

データを格納するのに特化したクラスです。また、データクラスを使用するには、以下のようにimportします。

from dataclass import dataclass

クラスにデコレーターを添えるだけ

dataclassは、使用したいクラスの一行上に「@dataclass」を添えるだけで使えます。つまり、デコレーターです。

from dataclasses import dataclass

@dataclass
class XXXX:
  フィールド名:型
  フィールド名:型

また、「フィールド:型」と記述すれば、イニシャライザでフィールドに引数の値を自動で設定します。

class XXXX:
  フィールド名:型
  フィールド名:型

フィールドとは?

関数内で使われる変数です。

本来、Pythonで関数を記述するときは、以下のように関数の引数「name」をフィールド(self.name)に設定します。

# code1-1
class User:
  def __init__(self,name):
    self.name = name

データクラスを使用する際、以下のように「フィールド:型」と記述すれば、自動的にフィールドに引数の値を渡してくれます。上のcode1-1と下のcode1-2は同じ意味です。

# code1-2
from dataclasses import dataclass

@dataclass
class XXXX:
  フィールド名:型
  フィールド名:型

データクラスでフィールドがすっきりする

関数に引数が多いと、以下のように一つずつフィールドに設定する必要があります。

class User:
  def__init__(self,name,age,gender,address,birthday):
    self.name = name
    self.age = age
    self.gender = self.gender
    self.address = address
    self.birthday = birthday

以下のようにデータクラスを使用すれば、コンストラクタを記述しなくて済みます。

from dataclasses import dataclass

@dataclass
class User:
    name:str
    age:int
    gender:str
    address:str
    birthday:date

__init__メソッド

コンストラクタと呼ばれており、このメソッドで、インスタンスの初期設定を行います。

準備

①MacにVScodeをインストールします。

MacOSでVisual Studio Codeをインストール

①MacにPyenv・Pythonをインストールし、VSCODEの実行環境を作ります。

【MacOS】PythonをインストールしてVSCodeの実行環境をつくる【Python】

環境

PC MacBook Air (Retina, 13-inch, 2019)
CPU 1.6 GHz デュアルコアIntel Core i5
メモリ 16 GB 2133 MHz LPDDR3
OS 10.15.2
Python 3.9.7
Visual Studio Code 1.50.0


実践

それでは実際にデータクラスを使用します。

from dataclasses import dataclass

@dataclass
class User:
    name:str
    age:int

user = User('tadokoro',24)
print(user.name)
print(user.age)

結果

tadokoro
24

解説

@dataclass
class User:
    name:str
    age:int

「@dataclass」でUserクラスをデコレートします。その中に「name」「age」フィールドを定義します。

user = User('tadokoro',24)

Userクラスのインスタンスを作成します。第一引数に「tadokoro」「24」を使用します。

デフォルト値を設定できる

以下のように、フィールドに直接デフォルト値を設定することもできます。ただし注意点があります。

from dataclasses import dataclass

@dataclass
class User:
    name:str
    age:int=24

user = User('tadokoro')
print(user.name)
print(user.age)

注意点①

デフォルト値を設定するフィールドは、設定しないフィールドの後に書く必要があります。

以下のように、設定しないフィールド「name」の後の設定するフィールド「age」にデフォルト値を設定する場合は問題ありません。

from dataclasses import dataclass

@dataclass
class User:
    name:str
    age:int=24

user = User('tadokoro')
print(user.name)
print(user.age)

しかし、設定しないフィールドよりも前のフィールドにデフォルト値を設定するとエラーとなります。

from dataclasses import dataclass

@dataclass
class User:
    name:str='tadokoro'
    age:int

user = User(age=24)
print(user.name)
print(user.age)

注意点②

ミュータブルなデフォルト値は、特殊な書き方で書く必要があります。

from dataclasses import field,dataclass

@dataclass
class User:
    name:str
    age:int=24
    x_list:list[int]=field(default_factory=list)

user = User('tadokoro',24)
print(user.items)

結果

[]

からのリストが出力されます。

リストに何か値が入っているリストを指定したい場合は以下のように「default_factory」の後に「lambda:[‘値’,’値’]」指定します。

from dataclasses import field,dataclass

@dataclass
class User:
    name:str
    age:int
    x_list:list[int]=field(default_factory=lambda:['note','pen'])

user = User('tadokoro',24)
print(user.items)


次回

工事中。


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告