【Pythonの基礎】クラスとオブジェクト指向について優しく解説

オブジェクト指向プログラミングは、現代のプログラミングの基本となる考え方であり、Pythonをより深く理解するために重要な概念です。
今回は、クラスとオブジェクト指向プログラミングについて簡単に解説します。

クラスとインスタンス

クラス

クラスは、オブジェクトの設計図のようなもので、属性(データ)とメソッド(処理)を定義します。クラスを定義するには、class文を使います。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print("わんわん!")

インスタンス

クラスから生成されるオブジェクトをインスタンスと呼びます。インスタンスは、クラスで定義された属性やメソッドを持ちます。

dog1 = Dog("ポチ", 3)
dog2 = Dog("ハチ", 1)

インスタンスの属性やメソッドにアクセスするには、ドット(.)を使います。

print(dog1.name)  # ポチ
print(dog2.age)  # 1

dog1.bark()  # わんわん!
PR

継承

継承は、既存のクラス(親クラス)から新しいクラス(子クラス)を派生させる機能です。
子クラスは、親クラスの属性やメソッドを引き継ぎ、新しい属性やメソッドを追加したり、既存のメソッドを上書き(オーバーライド)することができます。

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("...")

class Dog(Animal):
    def speak(self):
        print("わんわん!")

class Cat(Animal):
    def speak(self):
        print("にゃーん!")

継承を使うことで、コードの再利用性が向上し、プログラムの構造が整理されます。

多態性(ポリモーフィズム)

多態性(ポリモーフィズム)とは、異なるクラスのインスタンスが同じインターフェイス(メソッド)を持つことで、同じように扱える性質を指します。
多態性を利用することで、プログラムの柔軟性が向上し、コードのメンテナンスが容易になります。

class Bird(Animal):
    def speak(self):
        print("ちゅんちゅん!")

animals = [Dog("ポチ", 3), Cat("タマ", 2), Bird("ピヨ", 1)]

for animal in animals:
    animal.speak()

上記の例では、Animalクラスを継承したDogCatBirdクラスのインスタンスが、それぞれ異なるspeakメソッドを持っていますが、同じインターフェイス(speakメソッド)を使って操作することができます。

PR

カプセル化

カプセル化は、クラス内のデータや処理を外部から直接アクセスできないようにし、内部構造を隠蔽する機能です。カプセル化を行うことで、クラス内部の変更が外部に影響を与えることがなくなり、コードの安全性が向上します。

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

    def set_age(self, age):
        if 0 <= age <= 120:
            self.__age = age
        else:
            print("年齢が不正です。")

person = Person("山田太郎", 30)
print(person.get_name())  # 山田太郎
print(person.get_age())  # 30

person.set_age(200)  # 年齢が不正です。

上記の例では、Personクラスの__nameおよび__age属性にアンダースコア(__)を2つ付けて、外部からアクセスできないようにしています。また、属性へのアクセスは、ゲッター(get_name、get_age)およびセッター(set_age)メソッドを経由して行われます。

PR

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!