【Python】クラスとインスタンスの基本

【Python】クラスとインスタンスの基本

クラスとインスタンスの基本

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です