본문 바로가기
Error(Exception)/ERROR-PYTHON

[python] NotImplementedError

by 조조군 2024. 11. 28.
반응형

1. 오류 설명

NotImplementedError는 파이썬에서 추상적인 메서드를 구현하지 않았을 때 발생하는 오류입니다. 보통 추상 클래스나 인터페이스를 설계할 때, 서브클래스에서 반드시 재정의하도록 요구하는 메서드에 대해 사용됩니다.

즉, 이 오류는 의도적으로 정의된 메서드가 구현되지 않았음을 알리기 위해 사용되며, 잘못 호출되었을 때 예외를 발생시킵니다.


2. 오류 예시

아래는 NotImplementedError가 발생하는 상황의 예시입니다:

class Animal:
    def sound(self):
        raise NotImplementedError("This method must be overridden in subclasses")

class Dog(Animal):
    pass

d = Dog()
d.sound()  # NotImplementedError 발생

위 코드에서 sound() 메서드는 Animal 클래스에서 추상 메서드처럼 정의되었지만, Dog 클래스에서 이를 구현하지 않아 호출 시 오류가 발생합니다.


3. 오류 해결책

  • NotImplementedError를 방지하려면 서브클래스에서 추상 메서드를 반드시 재정의해야 합니다.
  • 파이썬의 abc 모듈을 활용하여 추상 클래스를 설계하면, 서브클래스가 추상 메서드를 구현하지 않았을 경우 실행 전에 명확히 알 수 있습니다.

4. 오류 예제 코드 및 해결 코드

오류 예제 코드

class Shape:
    def area(self):
        raise NotImplementedError("Subclasses must implement this method")

class Circle(Shape):
    pass

c = Circle()
c.area()  # NotImplementedError 발생

해결 코드

  1. 추상 메서드 구현
    class Shape:
     def area(self):
         raise NotImplementedError("Subclasses must implement this method")
    

class Circle(Shape):
def init(self, radius):
self.radius = radius

def area(self):
    return 3.14 * self.radius ** 2

c = Circle(5)
print(c.area()) # 78.5 출력


2. **`abc` 모듈 활용**
```python
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

# c = Shape()  # TypeError: Shape cannot be instantiated directly
c = Circle(5)
print(c.area())  # 78.5 출력

abc 모듈을 사용하면 추상 클래스는 직접 인스턴스화할 수 없으며, 모든 추상 메서드를 구현해야만 서브클래스를 사용할 수 있습니다.

반응형

'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글

[python] OverflowError  (0) 2024.11.30
[python] OSError  (1) 2024.11.29
[python] NameError  (1) 2024.11.27
[python] MemoryError  (0) 2024.11.27
[python] KeyboardInterrupt  (0) 2024.11.26

댓글