0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクトの属性についてのメモ

Posted at

attrhasattr の意味

attrhasattrPython の組み込み関数 で、オブジェクトの属性を操作・確認するために使います。


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

この例では、objname 属性はあるので 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_instancemeiho_oid という属性があるかわからない
  • 存在しない属性にアクセスすると AttributeError になってしまう
  • hasattr を使うことで、 属性が存在するか事前にチェック できるので、安全にプログラムが実行できる!

補足

  • hasattr内部的には getattr(obj, attr, None) is not None とほぼ同じ
  • getattr(obj, "attr", None) を使って None かどうか判定する方法もある。

結論

🔹 hasattr() はオブジェクトの属性が存在するかをチェックするために使う!
🔹 getattr() は属性の値を取得し、存在しない場合にデフォルト値を返せる!
🔹 setattr() は動的にオブジェクトに新しい属性を追加・変更できる!
🔹 delattr() はオブジェクトの属性を削除できる!

🚀 オブジェクトの動的操作をするときに便利な関数!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?