【Python】Python ~ dataclasses / データクラス ~

■ はじめに

久しぶりに、Pythonネタ。

dataclasses ってのがでてきたので、メモ。

目次

【1】dataclasses
 1)従来のクラスとの比較
【2】使用上の注意
【3】サンプル
 例1:List があるプロパティの場合
 例2:メソッド付きクラス

【1】dataclasses

* データ格納する際に便利なクラス

1)従来のクラスとの比較

* __init__ 要らずで、シンプルに書ける
 => それ以外も、イミュータブル(変更不可)にしたりとカスタマイズ可能

従来のクラス

class User:
  # __init__ で、クラスのプロパティを指定
  def __init__(self, name):
    self.name = name

dataclassesのクラス

from dataclasses import dataclass

@dataclass
class User:
  name: str

【2】使用上の注意

* Python3.6未満では使えない

https://docs.python.org/ja/3.10/library/dataclasses.html

より抜粋
~~~~~~~
バージョン 3.7 で追加.
~~~~~~~

【3】サンプル

例1:List があるプロパティの場合

from dataclasses import dataclass
from dataclasses import field
from typing import List

@dataclass
class Person:
  name: str
  friends: List[str] = field(default_factory=list)

person = Person('Mike', ['Tom', 'Kevin'])
print(person)
print('****')
print(person.name)
print('****')
print(person.friends)
print('****')

print('Done')

例2:メソッド付きクラス

from dataclasses import dataclass

@dataclass
class S3Object:
  bucket_name: str
  path_key: str

  def get_s3_path(self):
    return f's3://{self.bucket_name}/{self.path_key}'

  def get_full_path(self, file_name: str):
    return f'{self.get_s3_path()}/{file_name}'

s3_object = S3Object('your-bucket', 'xxxx/yyyy/zzzz')
print(s3_object)
print('****')
print(s3_object.get_s3_path())
print('****')
print(s3_object.get_full_path('hello_world.txt'))
print('****')

print('Done')

参考文献

https://qiita.com/tag1216/items/13b032348c893667862a

関連記事

Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251