属性の有無チェック (hasattr)
Pythonでは、指定のオブジェクトが特定の属性を持っているかを確認するhasattr関数があります。
次のようにして判別を行います。
# -*- coding: utf-8 -*-
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クラスのインスタンスは「code」と「name」属性を持っているためTrueが返り、「kana」属性は持っていないためFalseが返ります。
hasattr関数はgetattr関数を利用して実装されています。 getattr関数を使用した場合、保持していない属性を取得しようとするとAttributeErrorが発生しますが、第三引数でデフォルト値が設定されている場合はその値が返ります。
# -*- coding: utf-8 -*-
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
15行目はAttributeErrorが発生しますが、16行目ではデフォルト値である「No Attr」が返されます。
呼び出し可能なオブジェクトなのかを確認!
