Optional arguments in initializer of Python class
python
Solution
You can set default parameters:
class OpticalTransition(object):
def __init__(self, chemical, i, j=None, k=0):
self.chemical = chemical
self.i = i
self.k = k
self.j = j if j is not None else i
If you don't explicitly call the class with `j` and `k`, your instance will use the defaults you defined in the init parameters. So when you create an instance of this object, you can use all four parameters as normal: `OpticalTransition('sodium', 5, 100, 27)`
Or you can omit the parameters with defaults with `OpticalTransition('sodium', 5)`, which would be interpreted as `OpticalTransition('sodium', 5, None, 0)`
You can use some default values but not all of them as well, by referencing the name of the parameter: `OpticalTransition('sodium', 5, k=27)` uses `j`'s default but not `k`'s.
Python won't allow you to do `j=i` as a default parameter (`i` isn't an existing object that the class definition can see), so the `self.j` line handles this with an `if` statement that in effect does the same thing.
Problem
I was wondering if anyone had any good ways of quickly explaining how to efficiently and pythonically create user defined objects with optional arguments. For instance, I want to create this object: ``` class Object: def __init__(self, some_other_object, i, *j, *k): self.some_other_object = some_other_object self.i = i # If j is specified, assume it is = i if(j==None): self.j = i else: self.j = j # If k is given, assume 0 if(k==None): self.k = 0 else: self.k = k ``` Is there a better way to do this?