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

Reply via email to