I can't find a definitive answer for this. As far as I know, you can't have multiple __init__
functions in a Python class. So how do I solve this problem?
Suppose I have a class called Cheese
with the number_of_holes
property. How can I have two ways of creating cheese objects…
- One that takes a number of holes like this:
parmesan = Cheese(num_holes=15)
. - And one that takes no arguments and just randomizes the
number_of_holes
property:gouda = Cheese()
.
I can think of only one way to do this, but this seems clunky:
class Cheese:
def __init__(self, num_holes=0):
if num_holes == 0:
# Randomize number_of_holes
else:
number_of_holes = num_holes
What do you say? Is there another way?
Best Answer
Using
num_holes=None
as the default is fine if you are going to have just__init__
.If you want multiple, independent "constructors", you can provide these as class methods. These are usually called factory methods. In this case you could have the default for
num_holes
be0
.Now create object like this: