2022年2月3日木曜日

Python の dataclass 超入門

Python の dataclass 超入門

概要

Python の dataclass を使うと __init__.py を省略することができます
また typing と合わせて宣言ぽくクラスを定義できます
他にも便利な機能があるので軽く紹介します

環境

  • macOS 11.6.2
  • Python 3.10.2

これが

class User():

    def __init__(self, name, age=0):
        self.name = name
        self.age = age

    def show(self):
        print(self.name)
        print(self.age)

user1 = User("hawk")
user1.show()

こうなる

呼び出し方法などは同じように使えます

from dataclasses import dataclass

@dataclass
class User():
    name: str
    age: int = 0

    def show(self):
        print(self.name)
        print(self.age)

user1 = User("hawk")
user1.show()

ここがいいかも

  • __init__.py が省略できる
  • クラスの直後にフィールドの宣言が typing と一緒にあるのでクラスが管理しているフィールドがわかりやすい
  • dataclass アノテーションを付与するのをわすれがち

post_init

暗黙的にコールされる __init__.py の後に自動で呼び出してくれます
dataclass っぽい書き方かなと思います

from dataclasses import dataclass

@dataclass
class User():
    name: str
    age: int = 0

    def __post_init__(self):
        self.country = "Japan"

    def show(self):
        print(self.name)
        print(self.age)
        print(self.country)

user1 = User("hawk")
user1.show()

その他

継承やフィールドの初期化にメソッドをファクトリメソッドを呼び出したりすることもできます

他にもいろいろと機能があるので興味があれば参考使徒にある公式のドキュメントを御覧ください

最後に

Ruby とかも最近は typing やジェネリクスを使った書き方が主流っぽいので Python もこういった書き方主流になっていくのかもしれません

比較的新しめの Python でないと使えないので注意してください

参考サイト

0 件のコメント:

コメントを投稿