回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<pre><code> >>> 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__'
</code></pre>
<p>声明:<code>classAInstance</code>是<code>ClassA</code>的疯狂,而<code>objectTInstance</code>是<code>ObjectT</code>的实例。</p>
<p><strong>问题</strong>>;<code>classAInstance.objectTInstance</code>在哪里存储属性<code>attB</code>?
为什么访问方法3不起作用?<code>__dict__</code>到底存储什么?</p>
<pre><code> object.__dict__
A dictionary or other mapping object used to store an object’s (writable) attributes.
</code></pre>
<p>根据我的理解,访问方法1和2完全相同。而且<code>attB</code>存储在<code>ObjectT</code>对象的<code>__dict__</code>中。为了使Access 3工作,ObjectT必须提供一个名为<code>__getitem__</code>的字典魔术函数。</p>
<p>这是对的吗?</p>
<p>谢谢你</p>