私の備忘録がないわね...私の...

画像処理とかプログラミングのお話。

【Python】多重継承とABC

関数が被っている場合, 先頭のクラスの関数しか呼ばれない

class A:
    def __init__(self):
        print('a')
        
class B:
    def __init__(self):
        print('b')
        
class C(A, B):
    pass
        
C() #=> a

先頭のクラスの親クラスで定義されている関数と二番目のクラスで定義されている関数では後者が採用される

class A:
    def func(self):
        print('a')
        
class B(A):
    pass

class C:
    def func(self):
        print('c')
        
class D(B, C):
    pass
        
D().func() #=> c

ABCを継承していてもインスタンスを生成することはできる

from abc import ABC

class A(ABC):
    def __init__(self):
        print('a')
        
A() #=> a

他のクラスで同名の関数を定義していてもそのクラスがABCクラスを継承していなければErrorが発生する

from abc import ABC, abstractmethod

class A(ABC):
    @abstractmethod
    def f(self):
        pass
    
class B(A):
    pass

class C:
    def f(self):
        print('c')
        
class D(B, C):
    pass

D() #=> TypeError: Can't instantiate abstract class D with abstract methods f