Is it possible to override 'and' and/or 'or'? I cannot find a special
method for it... __and__ and __rand__ and __or__ and __ror__ are for
binary manipulation... any proposals?
Have marvelous sunday,
Marco 13 1873
Dekker <m.**********@gmail.comwrote:
Is it possible to override 'and' and/or 'or'? I cannot find a special
method for it... __and__ and __rand__ and __or__ and __ror__ are for
binary manipulation... any proposals?
If you want to customize the truth value testing you have to implement
__nonzero__
"
__nonzero__( self)
Called to implement truth value testing, and the built-in operation
bool(); should return False or True, or their integer equivalents 0 or
1. When this method is not defined, __len__() is called, if it is
defined (see below). If a class defines neither __len__() nor
__nonzero__(), all its instances are considered true.
"
Keep in mind the relation between __len__ and __nonzero__
ps. why you need to customize such a thing?
--
Lawrence, oluyede.org - neropercaso.it
"It is difficult to get a man to understand
something when his salary depends on not
understanding it" - Upton Sinclair
Dekker a écrit :
Is it possible to override 'and' and/or 'or'? I cannot find a special
method for it... __and__ and __rand__ and __or__ and __ror__ are for
binary manipulation... any proposals?
http://docs.python.org/ref/customization.html
"""
__nonzero__( self)
Called to implement truth value testing, and the built-in operation
bool(); should return False or True, or their integer equivalents 0 or
1. When this method is not defined, __len__() is called, if it is
defined (see below). If a class defines neither __len__() nor
__nonzero__(), all its instances are considered true.
"""
Not that in Python, 'and' don't yield bools:
>>"aa" and "bb"
'bb'
>>"aa" and None # yields None "aa" and 0
0
>>"aa" or "bb"
'aa'
>>0 or "bb"
'bb'
>>None or "bb"
'bb'
>>"aa" or 0
'aa'
>>"aa" or None
'aa'
>>>
HTH
On Sun, 07 Oct 2007 13:52:15 +0000, Dekker wrote:
Is it possible to override 'and' and/or 'or'?
Not without hacking the Python source code, in which case what you've got
is no longer Python.
Why do you want to do so?
--
Steven.
Dekker wrote:
Is it possible to override 'and' and/or 'or'? I cannot find a special
method for it... __and__ and __rand__ and __or__ and __ror__ are for
binary manipulation... any proposals?
Have marvelous sunday,
Marco
I guess you're looking for __nonzero__()
<URL:http://docs.python.org/ref/customization.html>.
You don't actually override the boolean operators, you just tell the
object how to tell others if it evaluates to True or False
(Truth-testing isn't a binary operation; cf. bool(my_object)).
/W
Wildemar Wildenburger wrote:
[whate everyone else wrote :(]
/W
Dangit! 4th of 4.
Gotta type quicker.
/W
On Sun, 07 Oct 2007 16:24:35 +0200, Wildemar Wildenburger wrote:
Wildemar Wildenburger wrote:
>[whate everyone else wrote :(]
/W
Dangit! 4th of 4.
Gotta type quicker.
That's okay, in two weeks time there will be 139 messages in this thread,
it will have devolved into an argument about whether Python's truth-
testing semantics are better or worse than whatever Java/Lisp/Haskell/
Ruby does, and *then* somebody will respond to the Original Poster with
"customize the __and__ and __or__ methods of your class".
Happens every time.
--
Steven.
On 7 Okt., 16:19, Steven D'Aprano <st...@REMOVE-THIS-
cybersource.com.auwrote:
On Sun, 07 Oct 2007 13:52:15 +0000, Dekker wrote:
Is it possible to override 'and' and/or 'or'?
Not without hacking the Python source code, in which case what you've got
is no longer Python.
Why do you want to do so?
--
Steven.
Well I think it is not possible what I wanted to achieve. By
overriding the "and" and "or" keyword I wanted to return a new object:
SqlValueInt(4) and SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
This is only possible for: +, -, /, *, >, >=, ...
Well... I have to live with the (binary) __and__, __or__ option and
the user has to write:
SqlValueInt(4) & SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
Thanks for your input, but __nonzero__ is not of any help in this
case... I want to abuse the "magic" functions for some transformations
and not some evaluation.
Marco
Dekker wrote:
Well... I have to live with the (binary) __and__, __or__ option and
the user has to write:
SqlValueInt(4) & SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
Thanks for your input, but __nonzero__ is not of any help in this
case... I want to abuse the "magic" functions for some transformations
and not some evaluation.
Then again, you could always write a function that does this. I know, I
know ...
/W
On Oct 7, 4:48 pm, Dekker <m.aschwan...@gmail.comwrote:
On 7 Okt., 16:19, Steven D'Aprano <st...@REMOVE-THIS-
cybersource.com.auwrote:
On Sun, 07 Oct 2007 13:52:15 +0000, Dekker wrote:
Is it possible to override 'and' and/or 'or'?
Not without hacking the Python source code, in which case what you've got
is no longer Python.
Why do you want to do so?
--
Steven.
Well I think it is not possible what I wanted to achieve. By
overriding the "and" and "or" keyword I wanted to return a new object:
SqlValueInt(4) and SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
This is only possible for: +, -, /, *, >, >=, ...
Well... I have to live with the (binary) __and__, __or__ option and
the user has to write:
SqlValueInt(4) & SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
Thanks for your input, but __nonzero__ is not of any help in this
case... I want to abuse the "magic" functions for some transformations
and not some evaluation.
Marco
You can see what "and" and "or" are actually doing:
import dis
dis.dis(lambda: x or y and z)
1 0 LOAD_GLOBAL 0 (x)
3 JUMP_IF_TRUE 11 (to 17)
6 POP_TOP
7 LOAD_GLOBAL 1 (y)
10 JUMP_IF_FALSE 4 (to 17)
13 POP_TOP
14 LOAD_GLOBAL 2 (z)
> 17 RETURN_VALUE
Here you can see nicely that they are not implemented as specialized
opcodes but being compiled to jumps. This causes their lazy nature. If
"and" would be implemented as a normal ( eager ) operator a statement
like:
if l and l[0] == 2:
BLOCK
would raise an IndexError if l is empty.
Steven D'Aprano a écrit :
On Sun, 07 Oct 2007 16:24:35 +0200, Wildemar Wildenburger wrote:
>Wildemar Wildenburger wrote:
>>[whate everyone else wrote :(]
/W
Dangit! 4th of 4. Gotta type quicker.
That's okay, in two weeks time there will be 139 messages in this thread,
it will have devolved into an argument about whether Python's truth-
testing semantics are better or worse than whatever Java/Lisp/Haskell/
Ruby does, and *then* somebody will respond to the Original Poster with
"customize the __and__ and __or__ methods of your class".
keyboard !-)
Kay Schluehr schrieb:
On Oct 7, 4:48 pm, Dekker <m.aschwan...@gmail.comwrote:
>On 7 Okt., 16:19, Steven D'Aprano <st...@REMOVE-THIS-
cybersource.com.auwrote:
>>On Sun, 07 Oct 2007 13:52:15 +0000, Dekker wrote: Is it possible to override 'and' and/or 'or'? Not without hacking the Python source code, in which case what you've got is no longer Python. Why do you want to do so? -- Steven.
Well I think it is not possible what I wanted to achieve. By overriding the "and" and "or" keyword I wanted to return a new object:
SqlValueInt(4) and SqlValueInt(5) --SqlOpAnd(SqlValueInt(4), SqlValueInt(5))
This is only possible for: +, -, /, *, >, >=, ...
Well... I have to live with the (binary) __and__, __or__ option and the user has to write:
SqlValueInt(4) & SqlValueInt(5) --SqlOpAnd(SqlValueInt(4), SqlValueInt(5))
Thanks for your input, but __nonzero__ is not of any help in this case... I want to abuse the "magic" functions for some transformations and not some evaluation.
Marco
You can see what "and" and "or" are actually doing:
import dis
dis.dis(lambda: x or y and z)
1 0 LOAD_GLOBAL 0 (x)
3 JUMP_IF_TRUE 11 (to 17)
6 POP_TOP
7 LOAD_GLOBAL 1 (y)
10 JUMP_IF_FALSE 4 (to 17)
13 POP_TOP
14 LOAD_GLOBAL 2 (z)
> 17 RETURN_VALUE
Here you can see nicely that they are not implemented as specialized
opcodes but being compiled to jumps. This causes their lazy nature. If
Very cool, didn't know that.
Diez
On 8/10/2007 1:57 AM, Diez B. Roggisch wrote:
Kay Schluehr schrieb:
>You can see what "and" and "or" are actually doing:
import dis dis.dis(lambda: x or y and z)
1 0 LOAD_GLOBAL 0 (x) 3 JUMP_IF_TRUE 11 (to 17) 6 POP_TOP 7 LOAD_GLOBAL 1 (y) 10 JUMP_IF_FALSE 4 (to 17) 13 POP_TOP 14 LOAD_GLOBAL 2 (z)
> > 17 RETURN_VALUE
Here you can see nicely that they are not implemented as specialized opcodes but being compiled to jumps. This causes their lazy nature. If
Very cool, didn't know that.
<rant>
Not very cool at all IMHO, because:
1. There's no other way to avoid unnecessarily evaluating the second
operand besides using jumps.
2. POP_TOP [used even in normal test & jump situations] is horrible, and
there are long-known better ways of doing it:
E.g. "Recursive Descent Compiling", by A.J.T. Davie and R. Morrison
[pub: Ellis Horwood, Chichester, 1981] says on page 146: "... jumptt
branches if the top stack element is true and merely removes it
otherwise. A similar sequence can be used for 'and' but with jumpff
replacing jumptt."
C Python uses two JUMP_IF_bool[_NEVER_POP] instructions, followed in
most cases by POP_TOP.
E.g.
>>dis.dis(lambda: tval if arg else fval)
1 0 LOAD_GLOBAL 0 (arg)
3 JUMP_IF_FALSE 7 (to 13)
6 POP_TOP
7 LOAD_GLOBAL 1 (tval)
10 JUMP_FORWARD 4 (to 17)
> 13 POP_TOP
14 LOAD_GLOBAL 2 (fval)
> 17 RETURN_VALUE
>>>
IMHO 4 more jump instructions
2 x JUMP_IF_bool_ALWAYS_POP (simple cases)
and 2 x JUMP_IF_bool_ELSE_POP (and/or)
would be very useful.
</rant>
On 10/7/07, Dekker <m.**********@gmail.comwrote:
>
Well I think it is not possible what I wanted to achieve. By
overriding the "and" and "or" keyword I wanted to return a new object:
SqlValueInt(4) and SqlValueInt(5) --SqlOpAnd(SqlValueInt(4),
SqlValueInt(5))
PEP 335 is a proposal to allow overriding of the logical 'and', 'or' operators:
See <http://www.python.org/dev/peps/pep-0335/and the discussion of
it at <http://mail.python.org/pipermail/python-dev/2004-September/048791.html>
A. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Ed |
last post by:
Greetings!
I'm trying to implement own collection BaseCollection
(inherited from NameObjectCollectionBase class), but my
attempt to override NameObjectCollectionBase virtual method
public virtual...
|
by: Woodmon |
last post by:
Example of my CSS follows:
<style type="text/css" media="screen">
BODY { color: white }
A:link { color: 66CCFF; }
A:visited { color: CC66FF; }
A:active { color: CC66FF; }
A:hover {...
|
by: Craig Schneider |
last post by:
// Is there any way to override the XML Serialization of the following
SimpleClass
// to turn off the DefaultValue of a boolean? Sure, I can override
the DefaultValue from
// true to false, but...
|
by: apex |
last post by:
Hi All :
How to override the class operator = like C++ ?
Best regards !
|
by: Mark Broadbent |
last post by:
Oh yes its that chestnut again!
Ive gone over the following
(http://www.yoda.arachsys.com/csharp/faq/ -thanks Jon!) again regarding this
subject and performed a few of my own tests.
I have two...
| |
by: Stoyan |
last post by:
Hi All,
I don't understand very well this part of MSDN:
"Derived classes that override GetHashCode must also override Equals to
guarantee that two objects considered equal have the same hash code;...
|
by: AWHK |
last post by:
How can I force anyone who subclasses my class to override the ToString()
method?
Andreas :-)
|
by: Adriano Coser |
last post by:
Hello.
After I converted my .net code to the new VC2005 syntax I started to get
C4490 on my ExpandableObjectConverter subclass overrides. The GetProperties
method is no longer called by the...
|
by: Tony Johansson |
last post by:
Hello!
I have noticed that you can write this override in two different ways.
You can either write in this way
public override string ToString()
{
return something;
}
|
by: Your_Persona |
last post by:
Is there a way to get effect1 with the method in effect2?
/////////////////////////////////////////////////////////////////////////////////////////////
using System;
using...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The...
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |