pythonでデータクラス
python3.7の新機能を読んでいた。
dataclassアノテーションが使えるようになったようだ。
これで、Kotlinの様に簡単にDtoを定義できるようになる。
dataclassの作り方
1 2 3 4 5 6 7 8 | import dataclasses @dataclasses.dataclass class Dto37: id: int name: str dto = Dto37(1, 'One') |
簡単だ。かつては普通のクラスを作って、コンストラクタですべてのプロパティを受け取れるようにしたり、
__str__や__repr__を実装したりしていたのに。
しかし、NamedTupleというのを使えば、python3.6でも似たようなことができるようだ。
typing.NamedTuple
1 2 3 4 5 6 7 | from typing import NamedTuple class Dto36(NamedTuple): id: int name: str dto = Dto36(2, 'Two') |
なんてことだ。簡単だ。
さらに調べると、collections.namedtupleというのを使えば、python3.1でも似たようなことができていた。
collections.namedtuple
1 2 3 4 5 6 7 | 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に変換
同じカテゴリの記事