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