今回は Python において、属性を動的に操作する関数について学んだことをまとめます。
クラスやオブジェクトを扱う中で、属性名を文字列で扱いたい場面に便利な関数たちです。
属性アクセス関数とは?
Pythonには、オブジェクトの属性を「動的に」操作するための組み込み関数があります。
関数名 | 説明 |
---|---|
getattr() |
属性を取得する |
hasattr() |
属性が存在するか確認する(True/False) |
setattr() |
属性を設定する(新規追加や上書き) |
delattr() |
属性を削除する |
ちなみにattrは「attribute(アトリビュート)」(属性)の略 です。
それぞれをサンプルコードとともに確認していきます。
1. getattr()
:属性を取得する
class Sample:
def __init__(self):
self.value = 10
obj = Sample()
# 通常の属性アクセス
print(obj.value)
# getattr を使った属性アクセス
print(getattr(obj, 'value'))
# 属性がない場合はエラー(例外が発生)
# print(getattr(obj, 'missing')) # AttributeError
# 第3引数にデフォルト値を渡すとエラーにならず代わりの値が返る
print(getattr(obj, 'missing', 'not found'))
10
10
not found
2. hasattr()
:属性の存在を確認する
class Sample:
def __init__(self):
self.name = 'Python'
obj = Sample()
print(hasattr(obj, 'name')) # True
print(hasattr(obj, 'version')) # False
True
False
3. setattr()
:属性を設定・追加する
class Sample:
pass
obj = Sample()
# 新しい属性を追加する
setattr(obj, 'lang', 'Python')
print(obj.lang)
# 既存属性の上書きも可能
setattr(obj, 'lang', 'JavaScript')
print(obj.lang)
Python
JavaScript
4. delattr()
:属性を削除する
class Sample:
def __init__(self):
self.value = 123
obj = Sample()
print(obj.value)
# 属性を削除
delattr(obj, 'value')
# print(obj.value) # AttributeError が発生する
123
まとめ
-
getattr()
を使うと属性名を文字列で指定して値を取得できます。 -
hasattr()
は属性が存在するかどうかを確認するための関数です。 -
setattr()
を使えば属性を動的に追加・更新できます。 -
delattr()
で属性を削除することができます。
今まではドットで直接アクセスするだけでしたが、これらを使えば文字列ベースで柔軟に操作できるようになります。今後クラスや動的処理を扱う中で使いこなせるようになりたいです。