클래스의 인스턴스를 만들 때 어떻게 든 이상한 오류가 발생합니다.수퍼 클래스의 __init__ 메서드를 호출 할 때 TypeError가 발생했습니다.
...
File <file1>, line 242, in some_method
created_object = SubClass(obj1, obj2)
File <file2>, line 11, in __init__
SuperClass.__init__(self, obj1)
TypeError: expected string or buffer
은 여기 두 __init__
방법이 어떻게 생겼는지 :
class SubClass(SuperClass):
def __init__(self, obj1=None, obj2=None):
SuperClass.__init__(self, obj1)
...
및
class SuperClass(object):
def __init__(self, obj1=None, obj2=None):
self.obj1 = obj1
다른 인스턴스를 생성하는 서브 클래스의 인스턴스를 생성합니다 "파일 1"에서 동일한 코드 같은 슈퍼 클래스의 서브 클래스 그들은 모두 비슷한 객체를 인수로 받지만 하위 클래스 중 하나만이 오류를 일으키고 있습니다. 또한 작업 서브 클래스 중 적어도 하나는 정확히 동일한 정의와 __init__
메소드의 첫 번째 라인을가집니다.
이 오류는 "file1"을 약간 변경 한 후에 나타 났지만 서브 클래 싱 객체 나 내가 전달한 객체를 인스턴스화하는 방식을 건드리지 않았습니다.
어쨌든, 나는 단순히 오류를 이해하지 못합니다. 문자열이나 버퍼를 기대하는 이유와 그 이유는 무엇입니까?
누구든지이 오류에 불을 붙일 수 있습니까?
편집 :
self.SubClass = getattr(importlib.import_module(subclass_module), 'SubClass')
del sys.modules[subclass_module] # Premature optimization strikes again!
으로 내가 게시 된이 질문에 대해 설명, 나는 위의이 오류가 발생하는 원인이 무엇임을 알아 냈다. 그러나 약간의 파기로 인해 오류 자체에 대해 더 혼란스러워졌습니다. 나는이에 __init__
방법 변경 :
def __init__(self, obj1=None, obj2=None):
print None.__init__
None.__init__('Hello', 'World')
을이처럼 전화 :
print None.__init__
None.__init__('Hello', 'World')
obj = self.SubClass(obj1, obj2)
나는 여전히이야 점점하여 __init__
방법 TypeError
, 하지만 내가 그것을 호출 할 때 그 바로 전에. 여기에 두 줄을 내가 넣어 두 인쇄의 dis
module
# None.__init__('Hello', 'World') in SubClass.__init__
10 9 LOAD_CONST 0 (None)
12 LOAD_ATTR 1 (__init__)
15 LOAD_CONST 1 ('Hello')
18 LOAD_CONST 2 ('World')
21 CALL_FUNCTION 2
24 POP_TOP
# None.__init__('Hello', 'World') right before I try to create the SubClass object
246 147 LOAD_CONST 0 (None)
150 LOAD_ATTR 7 (__init__)
153 LOAD_CONST 5 ('Hello')
156 LOAD_CONST 6 ('World')
159 CALL_FUNCTION 2
162 POP_TOP
출력을 사용하여 분해하는 이것이다 :
<method-wrapper '__init__' of NoneType object at 0x102977538>
<method-wrapper '__init__' of NoneType object at 0x102977538>
그래서 같은 __init__
방법 상수 호출 때마다, 그러나와 다른 결과. 여기서 무슨 일이 일어나고있는거야? 문제가 해결되지 않은 super(SubClass, self).__init__(obj)
로 변경하지만
'super (SubClass, self) .__ init __ (obj1, * args, ** kwargs)'? – karthikr
문제를 재현 할 수 없습니다. 그렇게하는 [SSCCE] (http://sscce.org/)를 제공하십시오. – martineau
@martineau 오류를 재생산하는 SSCCE를 만들 수 없습니다. 나는 문제의 근원을 알아 냈다. 그러나 오류 자체는 나에게 절대적인 수수께끼이다. –