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