Pythonの継承
Pythonの継承
継承により、別のクラスからすべてのメソッドとプロパティを継承するクラスを定義できます。
親クラスは、継承元のクラスであり、基本クラスとも呼ばれます。
子クラスは、派生クラスとも呼ばれる別のクラスから継承するクラスです。
親クラスを作成する
どのクラスも親クラスになることができるため、構文は他のクラスを作成する場合と同じです。
例
Person
、with
firstname
、lastname
propertiesという名前のクラスと、printname
メソッドを作成します。
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname,
self.lastname)
#Use the Person class to create an object, and then
execute the printname method:
x = Person("John", "Doe")
x.printname()
子クラスを作成する
別のクラスから機能を継承するクラスを作成するには、子クラスを作成するときに親クラスをパラメーターとして送信します。
例
Student
クラスからプロパティとメソッドを継承する、という名前のクラスを作成しますPerson
。
class Student(Person):
pass
注:pass
クラスに他のプロパティやメソッドを追加したくない場合は、このキーワードを使用してください。
これで、StudentクラスにはPersonクラスと同じプロパティとメソッドがあります。
例
クラスを使用Student
してオブジェクトを作成してから、次のprintname
メソッドを実行します。
x = Student("Mike", "Olsen")
x.printname()
__init __()関数を追加します
これまで、親からプロパティとメソッドを継承する子クラスを作成しました。
(キーワード__init__()
の代わりに)子クラスに関数を追加します。pass
注:この__init__()
関数は、クラスを使用して新しいオブジェクトを作成するたびに自動的に呼び出されます。
例
クラスに__init__()
関数を
追加します。Student
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
関数を追加すると、子クラスは親の関数__init__()
を継承しなくなります。__init__()
注:子の__init__()
関数は、親の関数の継承をオーバーライド
__init__()
します。
親の関数の継承を維持するには、親の__init__()
関数への呼び出しを追加し__init__()
ます。
例
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
これで、__ init __()関数が正常に追加され、親クラスの継承が維持され、関数に機能を追加する準備が整いました
__init__()
。
super()関数を使用する
Pythonにはsuper()
、子クラスがその親からすべてのメソッドとプロパティを継承するようにする関数もあります。
例
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
このsuper()
関数を使用すると、親要素の名前を使用する必要がなくなり、親からメソッドとプロパティが自動的に継承されます。
プロパティの追加
例
クラスに呼び出さgraduationyear
れる
プロパティを追加します。Student
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
self.graduationyear
= 2019
以下の例では、年は変数であり、学生オブジェクトを作成するとき2019
にクラスに渡される必要があり
ます。Student
これを行うには、__ init __()関数に別のパラメーターを追加します。
例
パラメータを追加し、year
オブジェクトを作成するときに正しい年を渡します。
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
x = Student("Mike", "Olsen", 2019)
メソッドを追加する
例
クラスに呼び出さwelcome
れる
メソッドを追加します。Student
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear
= year
def welcome(self):
print("Welcome",
self.firstname, self.lastname, "to the class of", self.graduationyear)
親クラスの関数と同じ名前のメソッドを子クラスに追加すると、親メソッドの継承がオーバーライドされます。