On Tue, 23 Jan 2007 18:07:55 -0800, Russ wrote: > Achim Domma wrote: >> Hi, >> >> I want to use Python to script some formulas in my application. The user >> should be able to write something like >> >> A = B * C >> >> where A,B,C are instances of some wrapper classes. Overloading * is no >> problem but I cannot overload the assignment of A. I understand that >> this is due to the nature of Python, but is there a trick to work around >> this? >> All I'm interested in is a clean syntax to script my app. Any ideas are >> very welcome. >> >> regards, >> Achim > > Why do you need to overload assignment anyway? If you overloaded "*" > properly, it should return > the result you want, which you then "assign" to A as usual. Maybe I'm > missing something.
One common reason for overriding assignment is so the left-hand-side of the assignment can choose the result type. E.g. if Cheddar, Swiss and Wensleydale are three custom classes, mutually compatible for multiplication: B = Cheddar() # B is type Cheddar C = Swiss() # C is type Swiss # without overloading assignment A = B * C # A is (possibly) Cheddar since B.__mul__ is called first A = C * B # A is (possibly) Swiss since C.__mul__ is called first # with (hypothetical) assignment overloading A = B * C # A is type Wensleydale since A.__assign__ is called Except, of course, there is no assignment overloading in Python. There can't be, because A may not exist when the assignment is performed, and if it does exist it might be a complete different type. Instead, you can do something like this: A = Wensleydale(B) * Wensleydale(C) or A = Wensleydale(B * C) -- Steven D'Aprano -- http://mail.python.org/mailman/listinfo/python-list