クラスとインスタンス
クラスとは、オブジェクトを定義するための設計図のようなものであり、インスタンスとは、クラスを元に生成されたオブジェクトのことです。
クラスは属性とメソッドを定義することができ、インスタンスはそれらの属性やメソッドにアクセスすることができます。
例えば、人をオブジェクトとして考えると、Personというクラスを定義することができます。このクラスには、名前や年齢といった属性、そして、挨拶をするsay_hello()メソッドが定義されているとします。
このクラスを元に、Johnという人物のインスタンスを生成し、say_hello()メソッドを呼び出すと、Johnが挨拶をするという動作が実現できます。
具体的には以下のようなPythonのコードをで確認しましょう。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"こんにちは、私は{self.name}です。{self.age}歳です。")
john = Person("John", 20)
john.say_hello()
上記の例では、Personというクラスを定義しています。このクラスは、nameとageという属性を持ち、say_hello()メソッドが定義されています。そして、このクラスを元に、johnというインスタンスを生成し、say_hello()メソッドを呼び出しています。この結果、”こんにちは、私はJohnです。20歳です。”という文字列が出力されます。
インスタンス変数とクラス変数
インスタンス変数とは、各インスタンスが持つ属性のことであり、クラス変数とは、クラス自体が持つ属性のことです。インスタンス変数は、各インスタンスごとに異なる値を持つことができますが、クラス変数は、全てのインスタンスで共通の値を持ちます。
例えば、自動車をオブジェクトとして考えると、自動車の製造年月日は全ての車で共通の値であり、車ごとに異なる値を持つ属性としては、車の色や価格があります。
この場合、製造年月日はクラス変数として定義し、色や価格はインスタンス変数として定義することができます。
具体的には以下のようなPythonのコードをで確認しましょう。
class Car:
manufacture_date = "2022/01/01"
def __init__(self, make, model, year, color, price):
self.make = make
self.model = model
self.year = year
self.color = color
self.price = price
def description(self):
return f"{self.year} {self.make} {self.model} ({self.color}, {self.price}円)"
car1 = Car("Toyota", "Corolla", 2022, "white", 2000000)
car2 = Car("Honda", "Civic", 2022, "black", 1800000)
print(car1.description())
print(car2.description())
print(Car.manufacture_date)
上記の例では、Carというクラスを定義しています。
このクラスは、make、model、year、color、priceというインスタンス変数を持ち、description()メソッドが定義されています。また、manufacture_dateというクラス変数を定義しています。
そして、このクラスを元に、car1とcar2という2つのインスタンスを生成し、description()メソッドを呼び出しています。さらに、Carクラス自体からmanufacture_dateを呼び出しています。
この結果、car1とcar2のdescription()メソッドによって、各車の詳細が出力されます。
また、Carクラスのmanufacture_dateを呼び出すことで、全ての車の製造年月日を取得することができます。