[Python]インスタンスプロパティの操作

プロパティ名を動的に指定する場合に

setattr()

プロパティに値をセット。

3つの引数を指定

  • オブジェクト
  • プロパティ名前
  • 設定する値

getattr()

プロパティの値を取得

2つの引数を指定

  • オブジェクト
  • 取得するプロパティ名

 

@dataclass

デコレータ

構造を表すデータクラス

 

コード

@dataclass
class User():
  id: int
  name: str
  item: list = field(default_factory=list)

user = User(id=1,name="aaa",item=[100,200,300])
print(f"{user.id} {user.name} {user.item}")
# 1 aaa [100, 200, 300]

user.name="bbb"
print(f"{user.id} {user.name} {user.item}")
# 1 bbb [100, 200, 300]

# プロパティを文字列で指定する(セット)
setattr(user,"id",2)
print(f"{user.id} {user.name} {user.item}")
# 2 bbb [100, 200, 300]

# プロパティを文字列で指定する(ゲット)
print(getattr(user,"item"))
# [100, 200, 300]

# 一つずつ取得
for key, value in user.__dict__.items():
  print(key, value)
# id 2
# name bbb
# item [100, 200, 300]