Pythonでクラスとメソッド、継承を用いたプログラムを作成する

スポンサーリンク

Pythonでクラスとメソッド、継承を用いた簡単なプログラムを作成してみます。

■Python

Google Colaboratory(Google Colab),2023年3月18日時点ではPython 3.9.16が用いられる。

■クラスとメソッド、継承を用いたプログラムの作成

では、早速クラスとメソッド、継承を用いたプログラムを作成しますので、コードを書いていきます。

■コード

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

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I'm {self.age} years old.")

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

    def say_hello(self):
        super().say_hello()
        print(f"My student ID is {self.student_id}.")

person = Person("John", 30)
person.say_hello()

student = Student("Jane", 20, "12345")
student.say_hello()

Personというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。このクラスは、継承を実現するための親クラスとなります。定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2,第3の引数,パラメータとしてname, ageを設定します。なお、最初の「self(自己)」という引数,パラメータを介して、「name」、「age」というクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いて「name」、「age」を指定します。

コンストラクタを設定後、今後はクラス内にdef文を用いてsay_hello()というメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドが呼び出された時の処理としてprint()を用いて文字列を出力となります。出力の際は、self.nameとself.ageをクラス内のコンストラクタを参照する。

その後、親クラスを継承して子クラスを作成しますので、Studentというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義。括弧内には、引数,パラメータとしてPersonを渡します。クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2,第3,第4の引数,パラメータとしてname, age ,student_idを設定します。この時、super()とドット演算子( . )を用いて__init__を指定します。これでPersonクラスのコンストラクタを呼び出すことができます(子クラスで親クラスを継承します)。親クラスで定義された属性値(name, age)の初期化が行われる。また、今回はself(自己)に対してドット演算子( . )を用いて「student_id」という属性を新たに追加しています。

コンストラクタを設定後、def文を用いてsay_hello()というメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドが呼び出された時の処理としてsuper()を用いてPersonクラスのsay_hello()メソッドをオーバーライド(親クラスで定義されたメソッドを再定義し同じ名前のメソッドを持ち)、子クラスで定義された新しい属性であるstudent_idの情報をprint()で文字列も一緒に出力するというものです。

その後、personとstudentという変数を定義し、その中にPerson(),Student()をそれぞれ格納し、インスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。インスタンス化された後に、括弧内に引数,パラメータとしてnameの情報とageの情報を渡します。Student()には、student_idの情報も渡します。

最後に作成したオブジェクトであるpersonとstudent、それぞれに対してドット演算子( . )を用いて、say_hello()を呼び出してみます。

■実行・検証

このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。

実行してみると、クラスとメソッド、継承を用いたプログラムで、オブジェクトを作成し、定義したオブジェクトやオーバーライドしたメソッドなどを呼び出し、処理された結果を出力させることができました。

コメント

タイトルとURLをコピーしました