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クラスのインスタンスはcodeとname属性を持っているため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が返されます。