many constructors in a class?

Steven D'Aprano steve at pearwood.info
Thu Aug 15 03:23:34 EDT 2013


On Wed, 14 Aug 2013 14:16:31 +0000, climb65 wrote:

> Hello,
> 
> here is a small basic question :
> 
> Is it possible to have more than one constructor (__init__ function) in
> a class? For instance, to create an object with 2 different ways? If my
> memory is good, I think that with C++ it is possible.
> 
> Thanks for your answer.

Yes it is. The built-in type dict is a good example, there is the regular 
default constructor[1] that you can call like this:

dict([('a', 100), ('b', 200)], spam=1, ham=2, eggs=3)


Plus there is an alternative constructor that you can call like this:

dict.fromkeys(['a', 'b', 'spam', 'ham', 'eggs'])


The way to create an alternative constructor is to use a class method:


def MyDict(dict):
    @classmethod
    def fromkeys(cls, keys):
        ...


If you need further details, please ask.




[1] The constructor is __new__, not __init__. __init__ is called to 
initialise the instance after __new__ constructs it.


-- 
Steven



More information about the Python-list mailing list