■ はじめに
久しぶりに、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