2013-10-11 4 views
3

어쩌면 이것은 바보 같은 질문 일 수 있습니다. 그러나이 코드가 파이썬 2.7에서 작동하지 않는 이유는 무엇입니까?파이썬 2.7에서 클래스 확장하기, super()의 사용

from ConfigParser import ConfigParser 

class MyParser(ConfigParser): 
    def __init__(self, cpath): 
     super(MyParser, self).__init__() 
     self.configpath = cpath 
     self.read(self.configpath) 

그것은에 실패 다음 super() 라인

TypeError: must be type, not classobj 

.

답변

4

ConfigParserobject에서 상속되지 않으므로 대부분 new-style class이 아닙니다. 그렇기 때문에 super이 작동하지 않습니다.

확인 ConfigParser 정의를하고 같이 있는지 확인합니다

class ConfigParser(object): # or inherit from some class who inherit from object 

그렇지 않으면, 그게 문제입니다.

코드에 대한 내 충고는 super이 아닙니다. 다만이 같은 ConfigParser에 직접 자신을 호출 :

class MyParser(ConfigParser): 
    def __init__(self, cpath): 
     ConfigParser.__init__(self) 
     self.configpath = cpath 
     self.read(self.configpath) 
+2

'ConfigParser.py' (2.7.4)의 소스를 보면,'ConfigParser'는 구식 클래스 인'RawConfigParser'에서 상속됩니다 ('object'에서 상속받지 않습니다). – cpburnz

+0

자, 자. 그게 이유야. –

3

문제는 ConfigParser이전 스타일 클래스 것입니다. super은 구식 클래스에서는 작동하지 않습니다. 대신, __init__에 명시 적으로 호출을 사용

def __init__(self, cpath): 
    ConfigParser.__init__(self) 
    self.configpath = cpath 
    self.read(self.configpath) 

오래된 스타일 클래스 대 새에 대한 설명은, 예를 들어 this question,를 참조하십시오.

+0

"구식 클래스"란 정확히 무엇입니까? – lollercoaster

+0

업데이트 된 답변보기 – shx2