概要
slots を使ったクラスを定義している場合に使えるテクニックを紹介します
環境
- macOS 11.7.2
- Python 3.10.2
サンプルコード
class User():
__slots__ = (
"name",
"age"
)
class Test():
def __init__(self, **kwargs):
self.user = User()
for k, v in kwargs.items():
setattr(self.user, k, v)
t1 = Test(name="hawk", age=20)
print(t1.user.name)
t2 = Test(error=-1)
解説
__slots__
は属性を宣言することができる機能です
宣言するだけなのでコンストラクタで初期化したりすることはできずまた __dict__
が生成されないのでメモリの節約になります
kwargs などをそのまま slots を使ったクラスに展開する場合は setattr を使うと良いです
slots に定義されている属性はそのまま設定されますが slots にない属性を setattr しようとするとエラーになるので注意しましょう
0 件のコメント:
コメントを投稿