概要
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 件のコメント:
コメントを投稿