KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

Python基礎 オブジェクト指向SOLID(インターフェース分離の原則)

登録日 :2025/09/17 18:32
カテゴリ :Python基礎

I : Interface segregation(インターフェース分離の原則)

インターフェースのクライアントにとって利用しないプロパティやメソッドへの依存を強制してはならない。

インターフェースや抽象クラスの抽象メソッドは、未実装のままではエラー
関係ないメソッドがあったとしても実装しなければならない

インターフェースに用意されている不必要なプロパティやメソッドにクライアントが依存しなくてもいいように、インターフェースは適切に分離すべき

原則に違反すると

  • インターフェースに変更があると、実装側で使っていないメソッドがある場合も修正しなければならなくなる

  • 不要なメソッドを使わない(退化させる)ことで、リスコフの置換原則に違反する

  • インターフェースが複数のアクターに使われる場合、単一責任の原則に違反する

解決策

役割ごとにインターフェースを分割する


サンプルプログラム

from abc import ABCMeta, abstractmethod


class Vehicle(metaclass=ABCMeta):
    def __init__(self, _name: str, _color: str):
        self.name = _name
        self.color = _color


class Movable(metaclass=ABCMeta):
    @abstractmethod
    def start(self):
        pass

    @abstractmethod
    def stop(self):
        pass


class Flyable(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):
        pass


class Airplane(Vehicle, Movable, Flyable):
    def start(self):
        print(f'{self.name}: start')

    def stop(self):
        print(f'{self.name}: stop')

    def fly(self):
        print(f'{self.name}: fly')


class Car(Vehicle, Movable):
    def start(self):
        print(f'{self.name} : start')

    def stop(self):
        print(f'{self.name} : stop')


if __name__ == '__main__':
    plane = Airplane('ANA', 'Blue')
    car = Car('Toyota', 'Red')

    plane.fly()
    car.start()