【Python】クラスとインスタンスの基本
- クラスとインスタンスの基本
- クラスの定義方法
- インスタンスの作成
- インスタンス変数
- クラス変数
- メソッドの定義
- コンストラクタ(__init__メソッド)
- インスタンスメソッド
- クラスメソッド
- スタティックメソッド
- 継承とオーバーライド
- 特殊メソッド
- カプセル化
クラスとインスタンスの基本
Pythonはオブジェクト指向プログラミングをサポートしており、クラスを使ってオブジェクト(インスタンス)を作成することができます。 クラスはオブジェクトの設計図であり、インスタンスはそのクラスから作られた具体的なオブジェクトです。
クラスの定義方法
Pythonでは class
キーワードを使ってクラスを定義します。
class Person:
pass
このクラスは空のクラスですが、後で属性やメソッドを追加できます。
インスタンスの作成
クラスを定義したら、次のようにしてインスタンスを作成できます。
person1 = Person()
person2 = Person()
これで Person
クラスの2つのインスタンスが作成されました。
インスタンス変数
インスタンスごとに異なるデータを持たせるためには、インスタンス変数を使用します。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)
print(person1.name) # Alice
print(person2.age) # 30
クラス変数
クラス変数はすべてのインスタンスで共有されます。
class Person:
species = "Human" # クラス変数
def __init__(self, name):
self.name = name
print(Person.species) # "Human"
p1 = Person("Alice")
p2 = Person("Bob")
print(p1.species) # "Human"
print(p2.species) # "Human"
メソッドの定義
クラス内で関数を定義すると、そのクラスのメソッドになります。
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, my name is {self.name}!"
p = Person("Alice")
print(p.greet()) # "Hello, my name is Alice!"
コンストラクタ(__init__メソッド)
__init__
メソッドはインスタンス生成時に自動的に実行される特別なメソッドです。
インスタンスメソッド
通常のメソッドはインスタンスを通してアクセスされ、self
を使ってインスタンス変数を操作します。
クラスメソッド
@classmethod
デコレータを使用すると、クラスメソッドを定義できます。
class Person:
species = "Human"
@classmethod
def get_species(cls):
return cls.species
print(Person.get_species()) # "Human"
スタティックメソッド
@staticmethod
を使うと、インスタンスに依存しないメソッドを作成できます。
class Math:
@staticmethod
def add(a, b):
return a + b
print(Math.add(3, 5)) # 8
継承とオーバーライド
Pythonではクラスを継承して新しいクラスを作成できます。
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Woof!"
d = Dog()
print(d.speak()) # "Woof!"
特殊メソッド
__str__
や __repr__
などの特殊メソッドを定義すると、オブジェクトの表示方法をカスタマイズできます。
カプセル化
Pythonでは _
や __
を使ってアクセス制御を行います。
class Person:
def __init__(self, name):
self.__name = name # プライベート変数
def get_name(self):
return self.__name
p = Person("Alice")
print(p.get_name()) # Alice