抽象クラス


抽象クラス

  • の共通のプロパティを持つ親.
  • 抽象クラスは、クラスメソッドを強制的に継承するサブクラスに対して特定のメソッドを実装するために使用される.
  • クラスはオブジェクトインスタンスを作成できません.
  • 使用

  • は以下のようにabcモジュールからABCMetaabstractmethodを導入する.
  • from abc import ABCMeta
    from abc import abstractmethod
  • 抽象クラスは、インプットされた抽象メソッドをデザイナとして使用する1つ以上の抽象メソッドを有しなければならない.
  • 次の手順に従って、フォーミュラを抽象クラスとして作成します.

    抽象クラス

    class Recipe(metaclass=ABCMeta):  # 추상 클래스는 ABCMeta를 상속 받아야 한다.
    	def __init__(self):
        	self.my_ingredients = []
            
    	def wash_hands(self, has_washed):  # 손을 반드시 씻어야 한다.
            return has_washed
            
    	@abstractmethod
        def prepare(self):  # Recipe 클래스를 상속 받는 모든 클래스는 prepare 메소드를 오버라이딩 해야 한다.
        	raise NotImplementedError()
    Recipe抽象クラスはインスタンス化できません.
    抽象クラスに実装内容がなく、実装が必要なメソッドのみがリストされている場合、この抽象クラスはインタフェースとも呼ばれます.

    サブクラス


    Recipe抽象クラスを継承するサブクラスを作成して多形性を実現できるようになりました.
    サブクラス
    class BeefStaek(Recipe):
    
    	def prepare(self, beef):
        	if self.wash_hands():
    	    	self.my_ingredients.append(beef)
        	else:
            	pass
                
        def __str__(self):
            return f"Beef staek made with: {self.my_ingredients}"
    実行
    beef_staek = BeefStaek()  # 인스턴스화
    print(beef_staek)  # "Beef staek made with: []"
    
    beef_staek.wash_hands(has_washed=True)  # 손을 씻는다.
    beef_staek.prepare(beef='beef')  # 재료를 추가해 확인하기
    print(beef_staek)  # "Beef staek made with: ['beef']"
    リファレンス
  • https://kukuta.tistory.com/338
  • https://wayhome25.github.io/cs/2017/04/10/cs-11/