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?

Original source

Related problems