>>> dir(classAInstance.objectTInstance.__dict__)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__',
'__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__',
'__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__setitem__', '__str__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems',
'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>> classAInstance.objectTInstance.attB # Access Method 1
199
>>> classAInstance.objectTInstance.__dict__['attB'] # Access Method 2
199
>>> classAInstance.objectTInstance['attB'] # Access Method 3
Traceback (most recent call last):
File "<input>", line 1, in ?
AttributeError: ObjectT instance has no attribute '__getitem__'
クレーム:classAInstance
はClassA
とobjectTInstance
のinsanceあるObjectT
のインスタンスです。はAttributeError:ObjectTインスタンスには属性 '__getitem__' がありません
質問>classAInstance.objectTInstance
属性attB
を格納していますか? アクセス方法3が機能しないのはなぜですか? __dict__
店舗は何ですか?
object.__dict__
A dictionary or other mapping object used to store an object’s (writable) attributes.
私の理解に基づいて、アクセス方法1と2はまったく同じです。またattB
は、オブジェクト__dict__
に格納されています。ObjectT
です。 Access 3を動作させるために、ObjectTは__getitem__
という辞書の魔法の機能を提供しなければなりません。
これは間違いありませんか?あなたがしようとした最初のメソッドを使って属性にアクセスするとき
は、属性がそこにあるかどうかを確認するためにPythonの最初のチェックに、あなたに__dict__
を