Python & Raspberry Pi 開発ブログ ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbianを使用して開発中。

【スポンサーリンク】

python3:クラスの継承

【スポンサーリンク】

今回はクラスの継承について紹介したいと思います。クラス名の後に継承したいクラス名を書くことで、継承することができます。MyClassAを継承したMyClassBをサンプルで作成しました。

クラスの継承

class MyClassA:    
    def __init__(self):
        self.nameA = "" 
    def get_nameA(self):        
        return self.nameA    
    def set_nameA(self, name):        
        self.nameA = name
  
class MyClassB(MyClassA): # MyClassAを継承
    def _init_(self):
        MyClassA._init_(self)        
        self.nameB =""    
    def get_nameB(self):        
        return self.nameB    
    def set_nameB(self, name):        
        self.nameB = name
        
a = MyClassB()
a.set_nameA("A") # MyClassAを継承しているので、MyClassAの変数、メゾットを使用することができる
print(a.get_nameA())
a.set_nameB("B") # MyClassBの変数、メゾットも使用できる
print(a.get_nameB())

MyClassBはMyClassAを継承していますので、MyClassBからMyClassAのメゾットを使うことができます。もちろんMyClassBのメゾットも使うことができます。

オーバーライド

下記のようにスーパークラスと同じメゾット名、引数のメゾットをサブクラスで作成するとオーバーライドすることができます。

class MyClassA:    
    def __init__(self):        
        self.nameA = ""    
    def get(self):        
        return self.nameA    
    def set(self, name):        
        self.nameA = name
   
class MyClassB(MyClassA): # MyClassAを継承
    def _init_(self):        
        MyClassA._init_(self) # スーパークラスの初期化
    def set(self, name): # MyClassAのsetメゾットをオーバーライド。こちらのメゾットが使われる。
        self.nameA = "override:" + name

a = MyClassB()
a.set("A") # オーバーライドしたsetメゾット
print(a.get()) # MyClassAを継承しているので、MyClassAのgetメゾットも使用できる

実行結果はoverride:Aと表示されます。スーパークラスとサブクラスの両方にset関数がありますが、オーバーライドされているため、サブクラスのset関数が実行されます。

pythonに戻る
トップに戻る