>>> 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.
基於我的理解,Access方法1和2完全相同。 attB
也存儲在ObjectT
的對象的__dict__
中。爲了使Access 3能夠工作,ObjectT必須提供名爲__getitem__
的字典魔術功能。
這是正確的嗎?
謝謝