From the Southern Hemisphere

From the Southern Hemisphere

南半球に移住したプログラマの日々

【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属性が存在しない」エラーが発生しました。これであるインスタンスに属性追加および削除を行っても、他のインスタンスに影響が無いことがわかりました。

読者さん募集中

記事が気に入ったら読者登録をお願いします!