【Python】クラスのインスタンスへの属性追加と削除
こんにちは、ピコピコくんです。
今回はPythonのクラスのインスタンスへの属性追加と削除について書きました。
こんなことが可能だなんて、Pythonさん...ちょっと自由過ぎませんか。
インスタンスへの属性追加と削除
クラスの定義
何も処理をせず、属性も存在しないクラス Dog を定義します。
class Dog:
pass
属性を追加
Dogクラスのインスタンス、dogを生成しdogに属性を追加してみましょう。追加した属性をprint関数で
dog = Dog() # Dog クラスのインスタンス、dog を生成
dog.name = "ポチ" # dogに属性 name を追加
dog.age = 8 # dogに属性 age を追加
dog.weight = 5.5 # dogに属性 weight を追加# dogに追加した属性の表示
print("名前:", dog.name, "年齢:", dog.age, "体重:", dog.weight, "Kg")# 実行結果
名前: ポチ 年齢: 8 体重: 5.5 Kg
属性を削除
del dog.weight # dog から weight 属性を削除
print(dog.weight) # 削除した weight 属性の表示を試みる# 実行結果:weight 属性が存在しないエラーが表示される
Traceback (most recent call last):
File "xxx.py", line xx, in <module>
print(dog.weight)
AttributeError: 'Dog' object has no attribute 'weight'
他インスタンスへの影響
属性の追加はクラスのインスタンスに対して行われるため、あるインスタンスに属性追加や削除を行っても、同じクラスから生成した他のインスタンスには影響しません。
それでは実践して、本当に影響が無いのか確認してみましょう。
class Dog:
pass# Dogクラスのインスタンス、akitaを生成
akita = Dog()
# akitaに属性(name)を追加
akita.name = "あきた"# Dogクラスのインスタンス、shibaを生成
shiba = Dog()
# shibaに属性(name)を追加
shiba.name = "しば"# akita.nameを表示
print(akita.name)# 実行結果
あきた
# shibaの属性 name を削除
del shiba.name# 削除したshibaの属性 name を削除
print(shiba.name)
# 実行結果:name 属性が存在しないエラーが表示される
Traceback (most recent call last):
File "xxx.py", line xx, in <module>
print(shiba.name)
AttributeError: 'Dog' object has no attribute 'name'
akitaのnameは表示され、削除したshibaのnameを表示しようとして「name属性が存在しない」エラーが発生しました。これであるインスタンスに属性追加および削除を行っても、他のインスタンスに影響が無いことがわかりました。
読者さん募集中
記事が気に入ったら読者登録をお願いします!