More __init__ methods

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Thu Nov 6 10:59:51 EST 2008


On Thu, 06 Nov 2008 16:49:08 +0100, Mr.SpOOn wrote:

> I know there can be only one __init__ method (at least, I think).
> 
> Often I need an object to be created in different ways, for example
> passing a string as argument, or an integer, or another object. To
> achieve this I put the default value of the arguments to None and then I
> some if...elif inside the __init__.
> 
> Is this a good practice? It actually works, but sometimes I think that
> in this way the __init__ method can become too complicated, for example
> when an object can be created using more than one argument and in
> different combinations.

I'm usually using `classmethod()`\s as alternative "constructors" then. 
For example:

class A(object):
    def __init__(self, a, b, c):
        self.a = a
        # ...

    @classmethod
    def from_string(cls, s):
        # ...
        return cls(a, b, c)

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list