pythonでデータクラス

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がメインの環境になった暁には、利用してみよう。

同じタグの記事
同じカテゴリの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA