attr
や hasattr
の意味
attr
や hasattr
は Python の組み込み関数 で、オブジェクトの属性を操作・確認するために使います。
1. hasattr(object, attribute_name)
使い方
hasattr(obj, "属性名")
- オブジェクトが指定された属性を持っているか確認する。
-
True
またはFalse
を返す。
例
class Sample:
def __init__(self):
self.name = "Alice"
obj = Sample()
# obj に 'name' 属性があるか?
print(hasattr(obj, "name")) # True
# obj に 'age' 属性があるか?
print(hasattr(obj, "age")) # False
この例では、obj
に name
属性はあるので True
を返し、age
はないので False
を返します。
実践的な使い方
オブジェクトに特定の属性があるかチェックしてから処理をする
if hasattr(obj, "name"):
print(obj.name)
else:
print("name属性は存在しません")
→ 存在しない属性にアクセスするとエラーになるので、hasattr
を使うことで安全にチェックできる!
2. getattr(object, attribute_name, default_value)
使い方
getattr(obj, "属性名", デフォルト値)
- オブジェクトの指定した属性の値を取得する。もし属性がなければデフォルト値を返す。
例
class Sample:
def __init__(self):
self.name = "Alice"
obj = Sample()
# obj の 'name' 属性を取得
print(getattr(obj, "name")) # "Alice"
# obj の 'age' 属性を取得(存在しないのでデフォルト値を返す)
print(getattr(obj, "age", 25)) # 25
getattr
vs hasattr
の違い
-
hasattr(obj, "属性名")
は 属性が存在するかどうか をTrue/False
で返す。 -
getattr(obj, "属性名", デフォルト値)
は 属性の値を取得 し、存在しなければデフォルト値を返す。
3. setattr(object, attribute_name, value)
使い方
setattr(obj, "属性名", 値)
- オブジェクトの属性を動的に追加・変更する。
例
class Sample:
pass # 何もないクラス
obj = Sample()
# obj に 'name' という属性を後から追加
setattr(obj, "name", "Alice")
print(obj.name) # "Alice"
実践的な使い方
動的に属性を追加・変更
class Person:
def __init__(self, name):
self.name = name
obj = Person("Alice")
# "age" という属性を後から追加
setattr(obj, "age", 30)
print(obj.age) # 30
→ プログラムの途中で、オブジェクトに新しい属性を追加することができる!
4. delattr(object, attribute_name)
使い方
delattr(obj, "属性名")
- オブジェクトの属性を削除する。
例
class Sample:
def __init__(self):
self.name = "Alice"
obj = Sample()
# 'name' 属性を削除
delattr(obj, "name")
print(hasattr(obj, "name")) # False
→ delattr
を使うと、属性を完全に削除できる!
まとめ
関数 | 説明 | 戻り値 |
---|---|---|
hasattr(obj, "attr") |
オブジェクトがその属性を持っているか確認 |
True / False
|
getattr(obj, "attr", default) |
属性の値を取得(なければデフォルト値) | 属性の値 / default
|
setattr(obj, "attr", value) |
属性を設定(動的に追加・変更) | なし |
delattr(obj, "attr") |
属性を削除 | なし |
どんなときに使う?
✅ hasattr
→ 属性があるかチェック(例: 安全にデータ取得)
✅ getattr
→ 属性がなければデフォルト値を設定して取得
✅ setattr
→ 属性を動的に追加・変更
✅ delattr
→ 属性を削除
実際のコードでの hasattr
の使い方
なぜ hasattr
を使うのか?
あなたのコードでは、次のような記述がありました:
if hasattr(account_instance, "meiho_oid"):
oid = account_instance.meiho_oid
account_instance
にmeiho_oid
という属性があるかわからない- 存在しない属性にアクセスすると
AttributeError
になってしまう -
hasattr
を使うことで、 属性が存在するか事前にチェック できるので、安全にプログラムが実行できる!
補足
-
hasattr
は 内部的にはgetattr(obj, attr, None) is not None
とほぼ同じ。 -
getattr(obj, "attr", None)
を使ってNone
かどうか判定する方法もある。
結論
🔹 hasattr()
はオブジェクトの属性が存在するかをチェックするために使う!
🔹 getattr()
は属性の値を取得し、存在しない場合にデフォルト値を返せる!
🔹 setattr()
は動的にオブジェクトに新しい属性を追加・変更できる!
🔹 delattr()
はオブジェクトの属性を削除できる!
🚀 オブジェクトの動的操作をするときに便利な関数!