Pythonで拡張性を持ったクラスを定義し、実装してみます。
■今回の環境(Python)
今回のPythonは、バージョン3.9.16を用いる。(なお、Google Colaboratory(Google Colab)を使用。)
■拡張性を持ったクラスの定義
では、早速拡張性を持ったクラスを定義するためにコードを書いていきます。
■コード
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 class Student(Person): def __init__(self, name, age, student_id): super().__init__(name, age) self.student_id = student_id def get_student_id(self): return self.student_id person1 = Person("田中", 21) print(person1.get_name()) print(person1.get_age()) student1 = Student("佐々木", 34, "S001") print(student1.get_name()) print(student1.get_age()) print(student1.get_student_id())
今回はPersonというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。このクラスは、定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2の引数,パラメータとしてnameを設定し、第3の引数,パラメータとしてageを設定します。なお、最初の「self(自己)」という引数,パラメータを介して、「name」、「age」というクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いて「name」、「age」を指定します。
次にdef文を用いてget_nameというメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドが呼び出された時の処理として、全メソッドからアクセス可能なインスタンス変数(self.name)をreturnで返すという処理になります。
次にdef文を用いてget_ageというメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドが呼び出された時の処理として、全メソッドからアクセス可能なインスタンス変数(self.age)をreturnで返すという処理になります。
メソッドを定義後、今後はStudentというオブジェクトを作成するためのテンプレート(設計図)であるクラスを定義します。括弧内には引数,パラメータとしてPersonを渡します。これでPersonが継承されます。クラスを定義後、クラス内にdef文を用いて’__init__’と記述し、コンストラクタを使います。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。次に第2の引数,パラメータとしてnameを設定し、第3の引数,パラメータとしてageを設定します。最後に第4の引数,パラメータとしてstudent_idを設定します。設定後、super()を用いてPersonの__init__() を呼び出します。呼び出す際に括弧内にはnameとageを設定します。これでStudentクラスのname とageがPersonクラスから継承された値で初期化されます。次に最初の「self(自己)」という引数,パラメータを介して、「student_id」というクラスのインスタンス変数が初期化されます。この時にself(自己)に対してドット演算子( . )を用いて「student_id」を指定します。
指定後、Student内にget_student_idというメソッドを定義します。括弧内には、メソッドで渡される最初の引数,パラメータは、インスタンス(作成されたオブジェクト)自体でなければならないため、「self(自己)」と記述し、最初の引数として渡します。このメソッドが呼び出された時の処理として、全メソッドからアクセス可能なインスタンス変数(self.student_id)をreturnで返すという処理になります。
メソッドを定義後、person1という変数を定義し、その中でPerson()を用います。これでインスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。この時に括弧内に第1の引数,パラメータとしてnameに渡す要素(今回は”田中”)を渡します。次に第2の引数,パラメータとしてageに渡す要素(今回は21)を渡します。渡した後に作成したオブジェクトであるperson1に対して(.)ドット演算子を用いてget_name()とget_age()を呼び出し、メソッドが処理された結果をprint()で出力します。
さらにstudent1という変数を定義し、その中でStudent()を用います。これでインスタンス化を行います。インスタンス化によりオブジェクトが作成されたことで、クラス内にアクセスできるようになりました。この時に括弧内に第1の引数,パラメータとしてnameに渡す要素(今回は”佐々木”)を渡します。次に第2の引数,パラメータとしてageに渡す要素(今回は34)を渡します。最後に第3の引数,パラメータとしてstudent_idに渡す要素(今回はS001)を渡します。渡した後に作成したオブジェクトであるstudent1に対して(.)ドット演算子を用いてget_name()とget_age()、get_student_id()を呼び出し、メソッドが処理された結果をprint()で出力します。
■実行・検証
このコード(セル)を保存し、Google Colaboratory上で、セルを実行してみます。
実行してみると、拡張性を持ったクラスを定義し、新しい機能を追加したり、より詳細な情報を表現し、情報を出力させることができました。
コメント