defaultdict
을 사용하는 Python 2.7 코드에서 MyClass
의 기본 객체를 만드는 사전 mydict
을 만들었습니다.Python defaultdict 객체의 속성이 AttributeError를 발생시킵니다.
나의 이해는 키 foo
가 defaultdict에 존재하지 않는 경우, MyClass
의 새로운 객체를 생성 할 것, 그리고 내가 __init__()
방법, 다음 속성이 있기 때문에 또한 존재하는 것 value
. 그래서 내가 왜이 곳이 아닌 작업 아래의 코드를 수행합니다
print mydict['foo'].value # Raises AttributeError
그러나,이 코드 수행 일 :
mydict['foo'].value = 1 # Works fine
오류를 해결하는 올바른 방법은 무엇입니까? (나는 방법에 의해하는 C++/자바 프로그래머입니다.) 아래
코드의 전체입니다 :from collections import defaultdict
class MyClass(object):
def __init__(self):
self.value = 0
mydict = defaultdict(lambda: MyClass)
print mydict['foo'].value # Raises AttributeError
#mydict['foo'].value += 1 # Raises AttributeError
#mydict['foo'].value = 1 # Works fine
결과 :
AttributeError Traceback (most recent call last)
<ipython-input-16-c9dd776d73de> in <module>()
6
7 mydict = defaultdict(lambda: MyClass)
----> 8 print mydict['foo'].value # Raises AttributeError
9 #mydict['foo'].value += 1 # Raises AttributeError
10 #mydict['foo'].value = 1 # Works fine
AttributeError: type object 'MyClass' has no attribute 'value'
감사합니다. 두 선언'defaultdict (lambda : MyClass)'와'defaultdict (MyClass)'의 차이점은 무엇입니까? – stackoverflowuser2010
'lambda : MyClass'는 기본적으로'return MyClass'라는 인자를 취하지 않는 함수입니다. 이것은'MyClass' 클래스 정의를 반환합니다. – metatoaster
'defaultdict (lambda : MyClass)'를 사용할 때'mydict [ 'foo']. value = 1' 문이 작동하는 이유를 설명 할 수 있습니까? 당신의 주장에 따르면'lambda '를 사용하면'value' 멤버 변수가 존재하지 않아야합니다. – stackoverflowuser2010