hasattr
もともと私はJavaのエンジニアだったのですが、最初Pythonを学習した際に戸惑ったのが動的に属性を追加したり削除できるため、「オブジェクトが属性を持つかどうかは型に依存せずに状況次第」という点です。
ですが、事前にhasattrという組み込み関数で事前にチェックをすることができるため、そのことを特に問題だとは思わなくなりました。
hasattr関数は、第1引数に検査対象オブジェクト、第2引数に属性名の文字列を指定します。サンプルで確認してみましょう。
class User(): """ ユーザークラス """ def __init__(self, name=""): self.name = name def say_hello(self): print("Hello, my name is " + self.name) def __str__(self): return "name:" + self.name # オブジェクトを生成する user = User("Kuro") # ageという属性を持つかどうかを検索する print(hasattr(user, "age")) # False # ageという属性を追加する user.age = 30 # 再度検査する print(hasattr(user, "age")) # True
userというオブジェクトは最初ageという属性を持っていないため、Falseとなっていましたが、属性追加後はTrueとなっていることが確認できます。