부모 클래스의 메소드를 호출하는 여러 수퍼 클래스가있는 서브 클래스에 문제가 있습니다. __init__
이 어떻게 부모의 인스턴스를 필요로하는지에 대해 오류가 발생하지만 자식의 인스턴스가 있습니다. StackOverflow에 대한 다른 질문은 이것이 부모 클래스에서 여러 번 정의 된 것이므로 인터프리터에 입력 된 간단한 스크립트로 확인한 것입니다.파이썬에서 클래스 정의가 여러 번 포함되지 않도록하려면 어떻게해야합니까?
참고 : 이것은 내가 궁금한 내용이 아닙니다. Base 클래스가 다시 정의되고 Inherited 클래스가 더 이상 제대로 작동하지 않게하는 문제를 보여주는 예제입니다.
>>> class Base(object):
... def __init__(self):
... print "Base!"
...
>>> class Inherited(Base):
... def __init__(self):
... Base.__init__(self)
... print "Inherited"
...
>>> class Base(object):
... def __init__(self):
... print "Base!"
...
>>> Inherited()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: unbound method __init__() must be called with Base instance as first argument (got Inherited instance instead)
>>>
제 질문은 기본 클래스가 여러 번 정의되지 않도록하려면 어떻게합니까? 내가 작업하고있는 프로젝트에는 여러 파일과 가져 오기가 있기 때문에 파일을 한 번만 포함 시키려면 모든 것을 리팩토링하는 것이 어려울 것입니다.
동일한 모듈을 여러 번 가져 오기 만하면이 문제가 발생하지 않습니다. 다른 일이 계속되어야합니다. 이게 뭐야? – NPE
같은 전역 네임 스페이스에 Base라는 두 개의 다른 클래스를 만들어이 문제를 만듭니다. 이러지 마. 동일한 동작을 나타내는 모듈로 코드 분할을 표시하십시오. – Marcin
'Base'가 모듈에 정의되어 있다면, 그 모듈을 여러 번 가져 오기만하면 처음으로 정의가 실행되기 때문에 문제가되지 않습니다. 질문에서 샘플 코드는 콘솔에서 정의를 명시 적으로 실행하고 있기 때문에 가짜입니다. 동일한 것은 아닙니다. – martineau