Passing a function as an argument from within the same class?
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Fri May 1 13:09:21 EDT 2009
On Fri, 01 May 2009 07:35:40 -0700, zealalot wrote:
> So, I'm trying to come up with a way to pass a method (from the same
> class) as the default argument for another method in the same class.
> Unfortunately though, I keep getting "self not defined" errors since the
> class hasn't been read completely before it references itself.
>
> Is there a better way of doing this?
My first instinct is to say "Don't do that!", but let's see if there's a
way to get what you want. It's actually very easy: just put the
definition of the passed method before the method you want to use it in,
then refer to it by name *without* self.
However, there is a catch: you need to manually pass in the instance,
instead of letting Python do it for you.
class Spam(object):
def ham(self):
return "ham"
def spam(self, func=ham):
return "spam is a tasty %s-like food product" % func(self)
And in use:
>>> obj = Spam()
>>> obj.ham()
'ham'
>>> obj.spam()
'spam is a tasty ham-like food product'
--
Steven
More information about the Python-list
mailing list