What is the semantics meaning of 'object'?

Rotwang sg552 at hotmail.co.uk
Mon Jun 24 11:00:10 EDT 2013


On 24/06/2013 07:31, Steven D'Aprano wrote:
> On Mon, 24 Jun 2013 02:53:06 +0100, Rotwang wrote:
>
>> On 23/06/2013 18:29, Steven D'Aprano wrote:
>>> On Sat, 22 Jun 2013 23:40:53 -0600, Ian Kelly wrote:
>>>> [...]
>>>>
>>>> Can you elaborate or provide a link?  I'm curious to know what other
>>>> reason there could be for magic methods to behave differently from
>>>> normal methods in this regard.
>>>
>>> It's an efficiency optimization. I don't quite get the details, but
>>> when you run something like "a + b", Python doesn't search for __add__
>>> using the normal method lookup procedure. That allows it to skip
>>> checking the instance __dict__, as well as __getattribute__ and
>>> __getattr__.
>>
>> It's not just an efficiency optimisation, it's actually necessary in
>> cases where a dunder method gets called on a type. Consider what happens
>> when one calls repr(int), for example - if this tried to call
>> int.__repr__() by the normal lookup method, it would call the unbound
>> __repr__ method of int with no self argument:
>
>
> I don't know about *necessary*, after all, classic classes manage just
> fine in Python 2.x:
>
> py> class OldStyle:
> ...     def __repr__(self):
> ...             return "Spam"
> ...
> py> repr(OldStyle())
> 'Spam'
> py> repr(OldStyle)
> '<class __main__.OldStyle at 0xb7553e0c>'

Point taken. It's also possible to override the __repr__ method of an 
old-style instance and have the change recognised by repr, so repr(x) 
isn't simply calling type(x).__repr__(x) in general.


> I daresay that there are good reasons why new-style classes don't do the
> same thing, but the point is that had the Python devs had been
> sufficiently interested in keeping the old behaviour, and willing to pay
> whatever costs that would require, they could have done so.

Sure, though the above behaviour was probably easier to achieve with 
old-style classes than it would have been with new-style classes because 
all instances of old-style classes have the same type. But I don't doubt 
that you're correct that they could have done it if they wanted.



More information about the Python-list mailing list