[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] SIP 4.8: regression in div/truediv
From:       Giovanni Bajo <rasky () develer ! com>
Date:       2009-07-25 1:34:38
Message-ID: 6b7f3bb6339ae47cc3524d6c55a6fc41 () develer ! com
[Download RAW message or body]

On Fri, 24 Jul 2009 22:53:23 +0100, Phil Thompson
<phil@riverbankcomputing.co.uk> wrote:
> On Fri, 24 Jul 2009 20:43:10 +0200, Giovanni Bajo <rasky@develer.com>
> wrote:
>> Hello,
>> 
>> I'm wrapping with SIP a global C++ operator/() overload, whose first 
>> argument is a SIP-wrapped class (within the same module).
>> 
>> With SIP 4.7, this function is called when I use "/" in Python, both 
>> with standard division behaviour and within modules using "from 
>> __future__ import division".
>> 
>> With SIP 4.8, this function is called only within modules with standard 
>> division behaviour. If a module uses the future directive, using "/" in 
>> Python raises an exception saying that there is no valid operand types.
>> 
>> I believe that the problem is that the truediv_slot of the object is not

>> being filled. Is this a wanted change in behaviour? And if so, how am I 
>> supposed to fix it?
> 
> "/" is the same as __div__. Define __truediv__ for true division.

I'm not sure that's a good choice for a default. "/" in Python maps to
__div__ in 2.x and __truediv__ in 3.x by default, but the future statement
is meant as an aid for the transition. So it's weird in SIP that simply
declaring something like:

  Foo operator/(Foo f, int x);

works with Python's "/" in 2.x and 3.x, but *not* when using the transition
aid.

I believe that "operator/" should map to both the __div__ and the
__truediv__ slot in Python 2.x. People that want to export a finer
granularity to Python (and I believe that it is highly unlikely, given that
C++ itself does not have it in the first place) could do with a
/ClassicDivOnly/ annotation, or by simply manually defining __div__ and
__truediv__ instead of using "operator/".

Plus, it's a a change in behaviour from SIP 4.7 :) 
-- 
Giovanni Bajo
Develer S.r.l.
http://www.develer.com
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic