Steven D'Aprano wrote:
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....
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)
But you don't quite get the behavior the OP wanted, which was to allow
(text-producing in this case) methods as the argument:
>>> obj = Spam()
>>> obj.spam()
'spam is a tasty ham-like food product'
>>> obj.spam(obj.ham)
Traceback (most recent call last):
File "<pyshell#271>", line 1, in <module>
obj.spam(obj.ham)
File "<pyshell#268>", line 5, in spam
return "spam is a tasty %s-like food product" % func(self)
TypeError: ham() takes exactly 1 argument (2 given)
Now it is tough to use obj.
--Scott David Daniels
scott.dani...@acm.org
--
http://mail.python.org/mailman/listinfo/python-list