[Python-Dev] [Python-checkins] cpython (3.2): don't use a slot wrapper from a different special method (closes #14658)
Mark Shannon
mark at hotpy.org
Tue Apr 24 17:36:31 CEST 2012
Benjamin Peterson wrote:
> 2012/4/24 Mark Shannon <mark at hotpy.org>:
>> I'm not happy with this fix.
>
> It's not perfect, but it's an improvement.
>
>> Admittedly code like:
>>
>> class S(str):
>> __getattr__ = str.__add__
>> s = S('a')
>> print(S.b)
My typo, should be:
print(s.b)
(Instance not class)
This doesn't work.
>>
>> is a little weird.
>> But I think it should work (ie print 'ab') properly.
>>
>> This works without the patch.
>>
>> class S(str):
>> __getattribute__ = str.__add__
>> s = S('a')
>> print(S.b)
Same typo,
this does work (with correct spelling :) )
>
> Does it?
>
> $ cat > x.py
> class S(str):
> __getattribute__ = str.__add__
> s = S('a')
> print(S.b)
> $ python3 x.py
> Traceback (most recent call last):
> File "x.py", line 4, in <module>
> print(S.b)
> AttributeError: type object 'S' has no attribute 'b'
>
>> (Prints 'ab')
>>
>> Also "slot wrapper" is a low-level implementation detail and
>> shouldn't impact the language semantics.
>>
>> dict.__getitem__ is a slot wrapper; dict.__getitem__ is not.
>> str.__getitem__ is a slot wrapper; list.__getitem__ is not.
>> If any of these change then the semantics of the language changes.
>
>
>
More information about the Python-Dev
mailing list