En Fri, 20 Feb 2009 16:49:21 -0200, Alan Isaac <ais...@american.edu> escribió:

I have a class `X` where many parameters are set
at instance initialization.  The parameter values
of an instance `x` generally remain unchanged,
but is there way to communicate to a method that
it depends only on the initial values of these parameters
(and does not need to worry about any changes)?

The behavior of method `m` depends on these parameter values.
It turns out `m` gets called a lot, which means
that the pameter values are accessed over and over
(self.p0, self.p1, etc).  I would like to
manufacture a function equivalent to the method
that simply uses fixed values (the values at the
time it is manufactured).  I do not care if this
function is attached to `x` or not.

Not automatically; but you could refactor the method to call an external function with arguments:

class X(...):
  ...
  def foo(self):
    c = self.a + self.b
    return c

Rewrite the method as:

  def foo(self):
    return _foo(self.a, self.b)

and define _foo outside the class:

def _foo(a, b):
  c = a + b
  return c

If you want a "frozen" function (that is, a function already set-up with the parameters taken from the current values of x.a, x.b) use functools.partial:

x = X()
frozen_foo = functools.partial(_foo, a=x.a, b=x.b)
frozen_foo() # equivalent to x.foo() at the time it was defined

But if you call this in a loop, perhaps it's enough to assign x.a, x.b to local variables and call _foo with those arguments.

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to