Default method arguments
Duncan Booth
duncan.booth at invalid.invalid
Wed Nov 16 04:48:47 EST 2005
Steven D'Aprano wrote:
> I would like to see _marker put inside the class' scope. That prevents
> somebody from the outside scope easily passing _marker as an argument
> to instance.f. It also neatly encapsulates everything A needs within
> A.
Surely that makes it easier for someone outside the scope to pass in
marker:
class A(object):
_marker = []
def __init__(self, n):
self.data =n
def f(self, x = _marker):
if x is self.__class__._marker:
# must use "is" and not "=="
x = self.data
print x
>>> instance = A(5)
>>> instance.f(instance._marker)
5
What you really want is for the marker to exist only in its own little
universe, but the code for that is even messier:
class A(object):
def __init__(self, n):
self.data =n
def make_f():
marker = object()
def f(self, x = _marker):
if x is _marker:
x = self.data
print x
return f
f = make_f()
>>> instance = A(6)
>>> instance.f()
6
More information about the Python-list
mailing list