On Sep 12, 6:21 am, Charles Fox <[EMAIL PROTECTED]> wrote: > I've just started playing around with Python, as a possible > replacement for a mix of C++, Matlab and Lisp. The language looks > lovely and clean with one huge exception: I do a lot of numerical > modeling, so I deal with objects (like neurons) described > mathematically in papers, by equations like > a_dot = -k(a-u) > In other languages, this translates nicely into code, but as far as I > can tell, Python needs the ugly: > self.a_dot = -self.k(self.a-self.u) > For large equations this is going to make my code seriously unreadable > to the point of needing to switch back to Matlab -- and it seems to go > against everything else about python's simplicity and elegance. Am I > missing something? Is there something like a 'with' command that lets > me set the scope, like > > with self: > .a_dot = -.k(.a-.u) > > It's premature to make language suggestions as I am new to the > language, but I would have though that making a 'with self' explicit > in all methods would have been neat, so I could just write > .a_dot = -.k(.a-.u) > which would still avoid confusion with local function variables, since > '.a' is different from 'a'. > > Please help if I am missing something -- this looks like a great > language but I am going to mad trying to read numerical code full of > 'self.'s breaking up the equations.
Just an idea: I think that if you have to get a more readable code you could abstract the function from the object using a significative name and then use this named function passing **self.__dict__ For example in your module you could write: #------ functional section ----------- def dothis(k,a,u): return k*(a-u) def dothat(m,r,k): return m*r+(k.m)^m #----- Class definition ------ class Bar(object): def foo(self): self.a_dot = dothis(**self.__dict__) self.boo = dothat(**self.__dict__) In this way the functional part is pure expression and very readable. HTH G. -- http://mail.python.org/mailman/listinfo/python-list