defaultdict
を使用して、デフォルトオブジェクトMyClass
を作成する辞書mydict
を作成するPython 2.7のコードを以下に示します。Pythonのdefaultdictオブジェクトの属性がAttributeErrorを発生します
私の理解では、キーfoo
がdefaultdictに存在しない場合、その後、MyClass
の新しいオブジェクトが作成されるだろうということで、私は__init__()
メソッド、属性を持っているので、また、存在することになるvalue
。なぜ私が持っている仕事下記のコード、しません。しかし、このコードは仕事
print mydict['foo'].value # Raises AttributeError
ん:エラーを解決するための正しいアプローチは何
mydict['foo'].value = 1 # Works fine
ですか? (私は方法によって、C++/Javaプログラマです。)以下
がコードの全体です: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)'の2つの宣言の違いは何ですか? – stackoverflowuser2010
'lambda:MyClass'は、基本的に、' MyClass'を返す引数を取らない関数です。これは文字通り 'MyClass'クラス定義を返します。 – metatoaster
'defaultdict(lambda:MyClass)'を使用すると 'mydict ['foo']。value = 1'という文がなぜ機能するのか説明できますか?あなたの議論によると、 'lambda'を使うとメンバー変数' value'は存在してはいけません。 – stackoverflowuser2010