반응형
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 발생
해결 코드
- 추상 메서드 구현
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 |
댓글