On Fri, Nov 7, 2008 at 8:48 AM, <[EMAIL PROTECTED]> wrote:
> I am trying to simulate the execution of some PLC ladder logic in
> python.
>
> I manually modified the rungs and executed this within python as a
> proof of concept, but I'd like to be able to skip the modification
> step. My thought was that this might be able to be completed via
> overloading, but I am not sure if (or how) it could be done.
>
> overloadings:
> + ==> OR
> * ==> AND
> / ==> NOT
>
> Example original code:
> A=/B+C*D
> translates to:
> A=not B or C and D
>
> I tried
> def __add__ (a,b):
> return (a or b)
>
> which gives me this:
>
> >>> x=False
> >>> y=True
> >>> x+y
> 1
> >>> x=True
> >>> x+y
> 2
>
> How can this be done?
> --
Python doesn't have operator overloading like C does. What you can do is
define what the operators will do when used with a custom class. You will
see code like this:
class Foo(object):
def __init__(self, value) :
self.value = value
def __add__(self, other) : #determines what happens when you have Foo +
something
return (self or other)
def __nonzero__(self) : #determines if the object evaluates to True
return bool(self.value)
Now you can call
>>> bool(Foo(True) + Foo(False))
True
>>> bool(Foo(False) + Foo(False))
False
If you don't cast it to a bool, , you will get something that looks like
<__main__.Foo object at 0x86170>, but it will still work as an argument to a
conditional.
>
> http://mail.python.org/mailman/listinfo/python-list
>
--
http://mail.python.org/mailman/listinfo/python-list