投稿日:
【Python】データクラスを使って引数を簡単にする【dataclass】
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)
次回
工事中。
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1