pythonでデータクラス
python3.7の新機能を読んでいた。
dataclassアノテーションが使えるようになったようだ。
これで、Kotlinの様に簡単にDtoを定義できるようになる。
dataclassの作り方
import dataclasses
@dataclasses.dataclass
class Dto37:
id: int
name: str
dto = Dto37(1, 'One')
簡単だ。かつては普通のクラスを作って、コンストラクタですべてのプロパティを受け取れるようにしたり、
__str__や__repr__を実装したりしていたのに。
しかし、NamedTupleというのを使えば、python3.6でも似たようなことができるようだ。
typing.NamedTuple
from typing import NamedTuple
class Dto36(NamedTuple):
id: int
name: str
dto = Dto36(2, 'Two')
なんてことだ。簡単だ。
さらに調べると、collections.namedtupleというのを使えば、python3.1でも似たようなことができていた。
collections.namedtuple
from collections import namedtuple
Dto31 = namedtuple('Dto31', ['id', 'name'])
dto = Dto31(3, 'Three')
Dto31_2 = namedtuple('Dto31_2', 'id,name')
dto = Dto31_2(4, 'Four')
これは少し癖がある。データタイプも指定できないし。
でも、パラメータを配列で渡しても良いし、カンマ区切りの文字列や、スペース区切りの文字列で渡しても良い。__repr__も実装されている。結構便利だ。
改めてdataclassアノテーション
今までも、やり方はあったのになぜ今回dataclassを追加したか。
dataclassの説明を読むと、適用されるメソッド(__repr__や__eq__など)のコントロールができたり、公開するフィールドを選んだりすることができるのがdataclassのようだ。読み取り専用のクラスも作成できたり、自由度が高くなっている。
今後、python3.7がメインの環境になった暁には、利用してみよう。
- BOM付きUTF-8からBOMを除去するpython
- jythonのヒープメモリ設定
- Kotlin1.2.50がリリースされていた
- macOSをHigh Sierraに更新した。スクリプト実行環境のバージョンは変わったのか
- macOSをMojaveに更新した。スクリプト実行環境のバージョンは変わったか
- pathlib.Pathを調べる
- pyenvでpython環境をインストール
- pyenvとvirtualenvでpython環境を構築
- python unpack
- python3で数値のlistを文字列のlistに変換
コメントを残す