Python 为什么缺少object.\uuu getattr\uuu?
为什么Python 为什么缺少object.\uuu getattr\uuu?,python,Python,为什么对象似乎没有\uuu getattr\uuu方法?它定义了\uuuuu setattr\uuuu和\uuuuu delattr\uuuuu。这不需要全部三个吗 >>> object.__setattr__ <slot wrapper '__setattr__' of 'object' objects> >>> >>> object.__delattr__ <slot wrapper '__delattr__' of
对象
似乎没有\uuu getattr\uuu
方法?它定义了\uuuuu setattr\uuuu
和\uuuuu delattr\uuuuu
。这不需要全部三个吗
>>> object.__setattr__
<slot wrapper '__setattr__' of 'object' objects>
>>>
>>> object.__delattr__
<slot wrapper '__delattr__' of 'object' objects>
>>>
>>> object.__getattr__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'object' has no attribute '__getattr__'
>>> sys.version
'2.7.3 (default, Feb 27 2014, 19:58:35) \n[GCC 4.6.3]'
>>>对象__
>>>
>>>对象__
>>>
>>>对象。\u\u getattr__
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:类型对象“object”没有属性“\uuu getattr\uuuu”
>>>sys.version
“2.7.3(默认,2014年2月27日,19:58:35)\n[GCC 4.6.3]”
是一种仅在之后运行的方法。由于对象
具有后者,因此技术上不需要前者。但一般来说,您不应该期望object
拥有其他对象(从中派生)所拥有的所有东西。由于对象
是在本机代码中实现的,因此它的行为可能有点不同。事实上,对象
没有\u getattr\u
方法
>>> import pprint
>>> pprint.pprint(dir(object))
['__class__',
'__delattr__',
'__doc__',
'__format__',
'__getattribute__',
'__hash__',
'__init__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__']
相反,它具有\uuuu getattribute\uuuu
>>> object.__getattribute__
<slot wrapper '__getattribute__' of 'object' objects>
>>>对象。获取属性__
解释原因:
object.\uuu\getattribute\uuu(self,name)
无条件调用以实现类实例的属性访问。如果该类还定义了\uuuuuGetAttr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
,则后者将不会被调用,除非\uuuuuuuuuuuuuuuuuuuuuuuuGetAttribute\uuuuu
换句话说,如果您有\uuuuu getattribute\uuuu
,那么同时定义\uuuuuu getattr\uuuu
是没有意义的
>>> object.__getattribute__
<slot wrapper '__getattribute__' of 'object' objects>
从历史上看,\uuuuuu getattr\uuuuu
是第一位的,而\uuuuuuu getattribute\uuuuuuu
是在Python2.3(iirc)中通过“新样式类”引入的。Python3只有新样式的类,但似乎仍然保留了两个钩子(可能是因为只有在“正常属性访问”失败时才调用钩子比较方便)。\uu getattr\uuuu
通常用于计算属性。例如,在访问模拟对象的属性时使用\uuu getattr\uuuu
。@Dunes:That或@property
/描述符。这完全取决于您试图创建的精确效果。最重要的是,\uuuuuGetAttr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。