Вы не можете сослаться на self
, поскольку он еще не находится в области видимости.
Идиоматический способ - сделать это вместо этого:
def calculate(self, red=None, blue=None, yellow=None):
if red is None:
red = self.red
if blue is None:
blue = self.blue
if yellow is None:
yellow = self.yellow
return red + blue + yellow
«Идиоматический», увы, не всегда означает «хороший, лаконичный и питонский».
Изменить: это не делает его лучше, не так ли ...
def calculate(self, red=None, blue=None, yellow=None):
red, blue, yellow = map(
lambda (a, m): m if a is None else a,
zip([red, blue, yellow], [self.red, self.blue, self.yellow]))
return red + blue + yellow