Default to class variables in a python class method?
class, default-value, python
Solution
You need to use sentinel values, then replace those with the desired instance attributes. `None` is a good option:
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
Note that the function signature is executed only once; you cannot use expressions for default values and expect those to change with each call to the function.
If you have to be able to set `x` or `y` to `None` then you need to use a different, unique singleton value as the default instead. Using an instance of `object()` is usually a great sentinel in that case:
_sentinel = object()
def transform_point(self, x=_sentinel, y=_sentinel):
if x is _sentinel:
x = self.x
if y is _sentinel:
y = self.y
and now you can call `.transform_point(None, None)` too.
Problem
I am writing a class method that I would like to use class variables if no other values are provided ``` def transform_point(self, x=self.x, y=self.y): ``` BUT... that doesn't seems to work: ``` NameError: name 'self' is not defined ``` I am getting the feeling there is a more clever way of doing this. What would you do?