見出し画像

Python -クラス, オブジェクト-

pythonはオブジェクト指向のプログラミング言語の一種。クラスはオブジェクトを実現するための機構


オブジェクト指向プログラミングとは

Pythonにおいて、すべてがオブジェクトとなる。これは、数値、文字列、リスト、関数、クラスなどプログラム内で扱うあらゆるものがオブジェクトとして扱われることを意味する。
従来のプログラミング言語では、処理する対象への処理の仕方を全て順番に記述する必要があった。そのため、処理する対象を厳密に把握していなければならず、処理の仕方を全く変える必要があった。

オブジェクトは、データとそれを操作する関数(メソッド)をカプセル化したもの

オブジェクトの重要な概念

  • インスタンス: クラスから生成された具体的なオブジェクトのこと

  • 属性: オブジェクトが持つデータのこと

  • メソッド: オブジェクトに対して実行できる関数のこと

  • クラス: オブジェクトの設計図のようなもの

1. クラス (class)

クラスは、関連するデータ(属性)とそのデータに対する操作(メソッド)をひとまとめにした設計図のようなもの

クラスの定義

Pythonでクラスを定義するには、classキーワードを使用する

class Dog:
    # クラス変数 (クラス全体で共有される属性)
    species = "Canis familiaris"

    # コンストラクタ (インスタンスが生成されるときに自動的に呼び出されるメソッド)
    def __init__(self, name, age):
        # インスタンス変数 (オブジェクトごとに異なる属性)
        self.name = name
        self.age = age

    # メソッド (クラスの機能を定義)
    def bark(self):
        return f"{self.name} is barking!"

    def get_age(self):
        return f"{self.name} is {self.age} years old."

Dogというクラスを作成した。この中にメソッドを書いていく。関数定義と同じくdefを使うが、メソッド名のあとの ( ) の中には 'self 'と書く 

  • クラス変数: species のようにクラス全体で共有される変数

  • コンストラクタ (__init__メソッド): オブジェクトが生成されるときに呼び出され、インスタンス変数(ここではnameとage)を初期化

  • メソッド: クラス内で定義された関数で、オブジェクトの振る舞いを定義

2. オブジェクト (object)

オブジェクトは、クラスに基づいて作成された具体的な実体。クラスは設計図であり、オブジェクトはその設計図を元に作られた具体的な「モノ」

オブジェクトの生成

オブジェクトを作成するには、クラス名を関数のように呼び出す

dog1 = Dog("Buddy", 5)
dog2 = Dog("Max", 3)

この例では、dog1とdog2はDogクラスのオブジェクトで、それぞれnameとageという属性を持っている

オブジェクトのメソッド呼び出し

print(dog1.bark())  
# 出力: Buddy is barking!

print(dog2.get_age())  
# 出力: Max is 3 years old.

オブジェクトのメソッドを呼び出すことで、そのオブジェクトに特有の動作を実行できる

3. クラスとオブジェクトの関係

クラスはオブジェクトを作成するための設計図であり、オブジェクトはその設計図に基づいて作られた具体的な実体

例: クラスとオブジェクトの使い方

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def start_engine(self):
        return f"{self.year} {self.make} {self.model} is starting."

car1 = Car("Toyota", "Corolla", 2020)
car2 = Car("Honda", "Civic", 2019)

print(car1.start_engine())  
# 出力: 2020 Toyota Corolla is starting.

print(car2.start_engine())  
# 出力: 2019 Honda Civic is starting.

Carクラスは make, model, year という属性を持ち、start_engine というメソッドを定義している。car1 と car2 は Carクラスのインスタンス(オブジェクト)であり、それぞれ異なる属性値を持っている

4. クラスの継承

クラスの継承は、既存のクラスを基に新しいクラスを作成する方法。継承を使用することで、コードの再利用性が向上し、共通の機能を親クラスにまとめ、子クラスに特殊な機能を追加できる

例: クラスの継承

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

    def speak(self):
        pass  # 子クラスでオーバーライドされるべきメソッド

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.speak())  
# 出力: Buddy says Woof!

print(cat.speak())  
# 出力: Whiskers says Meow!

Animal クラスは基本的な動作を定義し、Dog クラスと Cat クラスはその動作を継承して、特有の振る舞いを追加している


この記事が気に入ったらサポートをしてみませんか?