Python AttributeError:ObjectT实例没有属性“\uuu getitem\uuu”

Python AttributeError:ObjectT实例没有属性“\uuu getitem\uuu”,python,Python,根据我的理解,访问方法1和2完全相同。此外,attB存储在ObjectT对象的目录中。为了使Access 3正常工作,ObjectT必须提供一个名为uuu getitem_uuuu的字典魔法函数 这是正确的吗 谢谢当通过您尝试的第一种方法访问属性时,Python会首先检查_udict__;以查看该属性是否在其中。如果是的话,那就是它的用途。然后检查对象的类的dict。如果仍然没有找到,它将继续搜索超类。如果涉及多重继承,它会变得更复杂。如果仍然找不到,它将查找类或任何超类的_getattr__,

根据我的理解,访问方法1和2完全相同。此外,attB存储在ObjectT对象的目录中。为了使Access 3正常工作,ObjectT必须提供一个名为uuu getitem_uuuu的字典魔法函数

这是正确的吗


谢谢

当通过您尝试的第一种方法访问属性时,Python会首先检查_udict__;以查看该属性是否在其中。如果是的话,那就是它的用途。然后检查对象的类的dict。如果仍然没有找到,它将继续搜索超类。如果涉及多重继承,它会变得更复杂。如果仍然找不到,它将查找类或任何超类的_getattr__,并调用它来获取属性。如果所有这些都失败了,它就会出错

第二种方法直接访问对象的dict。它不会像第一个那样检查类的属性或调用_ugetattr


第三种方法完全是另一种方法;它尝试调用uuu getitem uuu,不要将其与uu getattr uu混淆。

当通过您尝试的第一个方法访问属性时,Python首先检查uu dict uu以查看该属性是否在其中。如果是的话,那就是它的用途。然后检查对象的类的dict。如果仍然没有找到,它将继续搜索超类。如果涉及多重继承,它会变得更复杂。如果仍然找不到,它将查找类或任何超类的_getattr__,并调用它来获取属性。如果所有这些都失败了,它就会出错

第二种方法直接访问对象的dict。它不会像第一个那样检查类的属性或调用_ugetattr


第三种方法完全是另一种方法;它试图调用uuu getitem uuu不要将其与uu getattr uu混淆。

混淆的原因是您有一个dictionary对象,它有一个u dict uu属性,该属性也指向一个dictionary。您的对象及其_dict____)属性不是同一个字典

大多数Python对象都有一个_dict___)属性,用于存储对象的属性;这些属性是使用访问的。搜索对象的_dict______)及其类和派生类的语法。当您的对象是字典时,它本身也存储项。可以使用[…]语法访问它们


可以在dict子类上编写uuu getattr_uuuu和uuu setattr_uuuuuuu方法,允许使用点表示法(一种JavaScript)访问字典中的项。这通常是一个坏主意,因为Python程序员不希望Python像JavaScript一样工作。

造成混淆的原因是您有一个dictionary对象,它有一个同样指向dictionary的uu dict_u_u_u_u_u_u属性。您的对象及其_dict____)属性不是同一个字典

大多数Python对象都有一个_dict___)属性,用于存储对象的属性;这些属性是使用访问的。搜索对象的_dict______)及其类和派生类的语法。当您的对象是字典时,它本身也存储项。可以使用[…]语法访问它们

可以在dict子类上编写uuu getattr_uuuu和uuu setattr_uuuuuuu方法,允许使用点表示法(一种JavaScript)访问字典中的项。这通常是一个坏主意,因为Python程序员不希望Python像JavaScript一样工作

    >>> 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__'
 object.__dict__
     A dictionary or other mapping object used to store an object’s (writable) attributes.