演習課題「サブクラスのコンストラクタを定義」
右側のコードエリアには、クラス PersonalComputer
のサブクラス Laptop
とインスタンス laptop_pc
が用意されています。
サブクラス Laptop
のコンストラクタを定義してください。
メンバ変数はスーパークラスの ram、storage に加えキーボード配列を表す key_layout とする。
期待する出力値
jis
※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#06:サブクラスのコンストラクタを定義(オーバーライド)
このチャプターでは、サブクラスのコンストラクタを定義する方法を学習します。
- 「オーバーライド」とは、サブクラスでスーパークラスに定義されているメソッドと同じ名前のメソッドを定義すること
- メソッドをオーバーライドすると、サブクラスにおいてはオーバーライドしたメソッドが、スーパークラスから引き継いだメソッドより優先的に呼びされるようになる
- オーバーライドしてもスーパークラスのメソッドは上書きされない
- スーパークラスのコンストラクタをオーバーライドする
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def add_age(self, year):
self.age += year
class Programmer(Person):
def __init__(self, name, age, language):
self.name = name
self.age = age
self.language = language
self.languages = {language}
- Programmer クラスのインスタンスを生成すると、Programmer クラスで定義したコンストラクタが呼び出されることがわかる
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def add_age(self, year):
self.age += year
class Programmer(Person):
def __init__(self, name, age, language):
self.name = name
self.age = age
self.language = language
self.languages = {language}
kirishima = Programmer("Kirishima", 15, "Ruby")
print(kirishima.name)
print(kirishima.language)
- super 関数を使うと、明示的にスーパークラスのメソッドを呼び出すことができる
- メソッドをオーバーライドしたが、スーパークラスのメソッドを利用したいときなどに活用できる
- たとえば、サブクラスのコンストラクタを定義したが、スーパークラスのコンストラクタも使ってメンバ変数を用意したいときに活用できる
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def add_age(self, year):
self.age += year
class Programmer(Person):
def __init__(self, name, age, language):
super().__init__(name, age)
self.language = language
self.languages = {language}
kirishima = Programmer("Kirishima", 15, "Ruby")
print(kirishima.name)
print(kirishima.language)
ログインすると採点できます
コードの実行