このステップでは、Python のクラス属性について学びます。クラス属性は、クラス内で定義され、そのクラスのすべてのインスタンス(オブジェクト)によって共有される変数です。これらは、各インスタンスに固有のインスタンス属性とは異なります。クラス属性を理解することは、効率的で組織的なクラスを設計するために重要です。
-
VS Code エディタを開きます。
-
~/project
ディレクトリに class_attributes.py
という名前の新しいファイルを作成します。
~/project/class_attributes.py
-
class_attributes.py
ファイルに以下のコードを追加します。
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
## Creating instances of the Dog class
dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)
## Accessing the class attribute
print(dog1.species)
print(dog2.species)
## Accessing instance attributes
print(dog1.name)
print(dog2.name)
この例では、species
は Dog
クラス内で定義されているが、どのメソッドの外にあるため、クラス属性です。name
と age
は __init__
メソッド内で定義され、各 Dog
インスタンスに固有であるため、インスタンス属性です。
-
ターミナルで以下のコマンドを使用して class_attributes.py
スクリプトを実行します。
python class_attributes.py
以下の出力が表示されるはずです。
Canis familiaris
Canis familiaris
Buddy
Lucy
ご覧のとおり、dog1
と dog2
の両方が同じ species
値 "Canis familiaris" を共有しています。ただし、name
はインスタンス属性であるため、それぞれ異なる name
値を持っています。
-
次に、クラス属性を変更して、インスタンスにどのような影響があるかを見てみましょう。
class Dog:
species = "Canis familiaris"
def __init__(self, name, age):
self.name = name
self.age = age
## Creating instances of the Dog class
dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)
## Accessing the class attribute
print(dog1.species)
print(dog2.species)
## Modifying the class attribute
Dog.species = "New Species"
## Accessing the class attribute again
print(dog1.species)
print(dog2.species)
-
再度 class_attributes.py
スクリプトを実行します。
python class_attributes.py
以下の出力が表示されるはずです。
Canis familiaris
Canis familiaris
New Species
New Species
Dog.species
を変更すると、dog1
と dog2
の両方に変更が反映されることに注意してください。これは、両者が同じクラス属性を共有しているためです。