추상 클래스를 initalizing 방지하는 간단한 방법은 다음과 같습니다
class Abs(object):
def __init__(self, *args, **kwargs):
raise NotImplementedError('abstract class can not be initalized')
def some_func(self):
raise NotImplementedError
이 정보 메시지와 함께 예외가 발생하고 클래스가 initalized 수 있도록하지 않습니다. 그러한 객체의 인스턴스를 생성하려면 서브 클래 싱이 필요합니다.
있어서 너무 추상적이다 : 그들은 대체 방법에 클래스를 유도 필요할 때
[...] 사용자 정의 기본 클래스에서 추상 방법은 이 예외를 제기해야 또는 실제 구현이 여전히 추가되어야 함을 나타 내기 위해 클래스가 개발되는 동안. 추상 같은 방법을 선언하는 또 다른 방법이다
. 그 차이는 클래스 B는 푸 메소드를 재정의하지 않은 경우, 인스턴스 오브젝트가 생성 될 때 raise NotImplementedError
실행될 때만 실패하고 없지만 @abstractmethod
가 TypeError: Can't instantiate abstract class B with abstract methods foo
을 올릴 것이다.
질문이 없습니다. 어떤 추상적 인 방법을 사용하지 않고도 클래스의 인스턴스화가 방지되는 곳은 무엇을 의미합니까? 당신은 추상 메소드를 구현하기 위해 클래스 자체를 시행하기를 원합니까? – Vinny
Java에서 추상 메소드와 추상 클래스는 두 가지 개념입니다. 추상 메소드는 서브 클래스에 의해 정의되어야하며 추상 클래스는 인스턴스화 될 수 없습니다. 하지만 Python의 abc 모듈에서 (내 이해) 둘 다 묶여 있습니다. 어떤 메소드를 추상 메소드로 꾸미지 않고 추상 클래스를 정의 할 수있는 방법이 있습니까? –