프로그래밍 언어/Python

파이썬에서 추상 클래스와 인터페이스의 차이점

Rateye 2021. 6. 18. 10:16
728x90
반응형
질문 : 파이썬에서 추상 클래스와 인터페이스의 차이점

파이썬에서 추상 클래스와 인터페이스의 차이점은 무엇입니까?

답변

때때로 보게되는 것은 다음과 같습니다.

class Abstract1:
    """Some description that tells you it's abstract,
    often listing the methods you're expected to supply."""

    def aMethod(self):
        raise NotImplementedError("Should have implemented this")

Python에는 공식적인 인터페이스 계약이 없으며 필요하지 않기 때문에 추상화와 인터페이스 사이의 Java 스타일 구분이 존재하지 않습니다. 누군가가 공식 인터페이스를 정의하려는 노력을한다면 그것은 또한 추상 클래스가 될 것입니다. 유일한 차이점은 독 스트링에 명시된 의도에 있습니다.

그리고 추상과 인터페이스의 차이점은 오리 타이핑을 할 때 머리가 쪼개지는 것입니다.

Java는 다중 상속이 없기 때문에 인터페이스를 사용합니다.

Python에는 다중 상속이 있으므로 다음과 같은 내용도 볼 수 있습니다.

class SomeAbstraction:
    pass  # lots of stuff - but missing something

class Mixin1:
    def something(self):
        pass  # one implementation

class Mixin2:
    def something(self):
        pass  # another

class Concrete1(SomeAbstraction, Mixin1):
    pass

class Concrete2(SomeAbstraction, Mixin2):
    pass

이것은 믹스 인과 함께 일종의 추상 슈퍼 클래스를 사용하여 분리 된 구체적인 하위 클래스를 만듭니다.

출처 : https://stackoverflow.com/questions/372042/difference-between-abstract-class-and-interface-in-python
728x90
반응형