내 클래스에서 파생 된 모든 클래스가 특정 메서드를 재정의하도록하려는 경우. 그것들이 오버라이드 (override)되지 않는다면, 메소드 중 하나가 호출 될 때가 아니라 컴파일이 시작된 후 가능한 한 빨리 NotImplementedError를 발생시키고 싶습니다.메서드가 재정의되었는지 확인
난과 같이 메타 클래스와 함께 할 수 있다는 것을 발견했습니다 method_a
또는 method_b
가 BaseClass로에서 파생 된 클래스에 의해 오버라이드 (override)하지 않는 경우
class MetaBaseClass(type):
# list of method names which should be overridden
to_override = ['method_a', 'method_b']
def __init__(cls, name, bases, dct):
for methodName in cls.to_override:
if methodName not in dct:
raise NotImplementedError('{0} must override the {1} method'.format(name, methodName))
super(MetaBaseClass, cls).__init__(name, bases, dct)
class BaseClass(object):
__metaclass__ = MetaBaseClass
def method_a(self):
pass
def method_b(self):
pass
이 클래스 정의시 오류가 발생합니다.
더 좋은 방법이 있나요?
FYI 이것은 컴파일 시간이 아니며, 일반적으로 모듈 가져 오기 시간 인 클래스 정의 시간입니다. 하지만 클래스는 조건부로 정의 될 수도 있습니다 (따라서이 테스트는 실행되지 않습니다). 응용 프로그램을 실행하는 동안 언제든지 호출되는 내부 함수. – delnan
@delnan 감사합니다. 가능한 한 빨리 오류를 제기하고 싶습니다. 나는 그 말을 고쳐 쓸거야. – Griffin