using attributes as defaults
jeanmichel at sequans.com
Tue Feb 8 11:19:16 CET 2011
Westley Martínez wrote:
> On Fri, 2011-02-04 at 13:08 -0800, Wanderer wrote:
>> I want to give the option of changing attributes in a method or using
>> the current values of the attributes as the default.
>> class MyClass():
>> """ my Class
>> def __init__(self):
>> """ initialize
>> self.a = 3
>> self.b = 4
>> def MyMethod(self, a = self.a, b = self.b)
>> """ My Method
>> self.a = a
>> self.b = b
>> DoSomething(a, b)
>> The above doesn't work. Is there a way to make it work?
> This doesn't work because you can't reference keyword arguments in the
> keyword argument array. This will work:
> class MyClass:
> def __init__(self):
> """ initialize
> Really? These are the worst docstrings ever.
> self.a = 3
> self.b = 4
> def MyMethod(self, a=None, b=None)
> if a is not None:
> self.a = a
> if b is not None:
> self.b = b
> DoSomething(a, b)
There is an alternative to this None thing:
Don't use optional arguments. Optional arguments are fine ,but I found
myself avoiding using them is often a better choice.
Quoting the zen of python: "Explicit is better than implicit."
If the reason for using optional arguments is that it'll take you 2 sec
less to write the method call, then it sounds kind of wrong. Any other
reason would be valid I guess.
I personnaly use optional arguments only to keep backward compatibility
when changing a method signature.
More information about the Python-list