, 내가 부모 클래스 대신 클래스 메서드에 super()
을 사용할 수 있어야합니다 :configparser 생성자에서 super()를 사용할 수없는 이유는 무엇입니까? 파이썬 3에서
class demodict(OrderedDict):
def __setitem__(self, key, val):
print(key)
super().__setitem__(self, key, val)
나는 demodict()
를 인스턴스화하고 여기에 값을 추가 할 때 예상대로 위의 동작합니다가. 나는 ConfigParser
개체의 데이터 형식으로 사용하지만, 뭔가 잘못 :
>>> Config = configparser.ConfigParser(dict_type=demodict)
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
conf = configparser.ConfigParser(dict_type=demodict)
File ".../anaconda/lib/python3.4/configparser.py", line 588, in __init__
self._proxies[default_section] = SectionProxy(self, default_section)
File "<pyshell#14>", line 5, in __setitem__
super().__setitem__(self, key, val)
File ".../anaconda/lib/python3.4/collections/__init__.py", line 67, in __setitem__
if key not in self:
TypeError: unhashable type: 'demodict'
내가 부모 클래스와 일반 dict
와 OrderedDict
을 교체하는 경우는, 에러도 괴상 가져옵니다
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
conf = configparser.ConfigParser(dict_type=demodict)
File ".../anaconda/lib/python3.4/configparser.py", line 588, in __init__
self._proxies[default_section] = SectionProxy(self, default_section)
File "<pyshell#7>", line 6, in __setitem__
super().__setitem__(self, key, val)
TypeError: expected 2 arguments, got 3
super()
대신 OrderedDict
또는 dict
을 명시 적으로 입력하면 demodict
을 dict_type
으로 사용할 수 있습니다. 누군가 일어나는 일을 설명 할 수 있습니까? (쉬운 해결 방법이 있기 때문에 나는 해결책에 대한 것보다 더 많은 원인이 궁금합니다 ...)
super() .__ setitem__은 자동으로 첫 번째 인수로 'self'를 전달합니다. 그것은'super() .__ setitem __ (key, val)'을 그냥 수행하면 작동합니다. – vaultah
실제로! 그것은 그 문제를 해결했습니다. Duh, 그러나 또한, 얼마나 이상한. 나는'super()'에있는 문서를 좀 더주의 깊게 읽어야했다. 설명과 함께 대답으로 써 주시겠습니까? – alexis
나는 점수를 아끼지 만, 왜 누군가가 이것이 나쁜 질문이라고 생각하는지 궁금합니다. – alexis