Cliff Wells wrote: > > On Wed, 2008-04-16 at 13:47 -0500, Larry Bates wrote: >> [EMAIL PROTECTED] wrote: >> > I wanted to know if there's any way to create a method that takes a >> > default parameter, and that parameter's default value is the return >> > value of another method of the same class. For example: >> > >> > class A: >> > def __init__(self): >> > self.x = 1 >> > >> > def meth1(self): >> > return self.x >> > >> > def meth2(self, arg=meth1()): >> > # The default `arg' should would take the return value of >> > meth1() >> > print '"arg" is', arg >> > >> > This obviously doesn't work. I know I could do >> > >> > ... >> > def meth2(self, arg=None): >> > if arg is None: >> > arg = self.meth1() >> > >> > but I'm looking for a more straightforward way. >> >> You can write this as: >> >> def meth2(self, arg=None): >> arg = arg or self.meth1() >> >> IMHO - You can't get much more "straightforward" than that. > > What if arg is 0 an empty list or anything else that's "False"? > > def meth2(self, arg=None): > arg = (arg is not None) or self.meth1() > > is what you want.
No, it's not: >>> for arg in None, 0, "yadda": ... print "---", arg, "---" ... if arg is None: arg = "call method" ... print "OP:", arg ... print "Larry:", arg or "call method" ... print "Cliff:", (arg is not None) or "call method" ... --- None --- OP: call method Larry: call method Cliff: True --- 0 --- OP: 0 Larry: call method Cliff: True --- yadda --- OP: yadda Larry: yadda Cliff: True Peter -- http://mail.python.org/mailman/listinfo/python-list