属性の有無チェック (hasattr) | Python-izm

属性の有無チェック

Pythonでは、指定のオブジェクトが特定の属性を持っているかを確認するhasattr関数があります。またここではgetattr関数についても取り扱います。

hasattr

次のようにして判別を行います。

class AttrTest():

    def __init__(self):
        self.code = -1


attr_test = AttrTest()
attr_test.name = 'python-izm'

print(hasattr(attr_test, 'code'))
print(hasattr(attr_test, 'name'))
print(hasattr(attr_test, 'kana'))
True
True
False

上記のようなコードの場合、AttrTestクラスのインスタンスはcodename属性を持っているためTrueが返り、kana属性は持っていないためFalseが返ります。

getattr

hasattr関数はgetattr関数を利用して実装されています。getattr関数を使用した場合、保持していない属性を取得しようとするとAttributeErrorが発生しますが、第三引数でデフォルト値が設定されている場合はその値が返ります。

class AttrTest():

    def __init__(self):
        self.code = -1


attr_test = AttrTest()
attr_test.name = 'python-izm'

print(getattr(attr_test, 'code'))
print(getattr(attr_test, 'name'))
# print(getattr(attr_test, 'kana'))
print(getattr(attr_test, 'kana', 'No Attr'))
-1
python-izm
No Attr

12行目はAttributeErrorが発生しますが、13行目ではデフォルト値であるNo Attrが返されます。