Re: Overloading __init__ & Function overloading
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: Overloading __init__ & Function overloading

From: John J. Lee <jjl@pobox.com>
Date: Fri Sep 30 2005 - 22:01:27 CEST

Paul Rubin <"http://phr.cx"@NOSPAM.invalid> writes:

> "Iyer, Prasad C" <prasad.c.iyer@capgemini.com> writes:
> > But I want to do something like this
> >
> > class BaseClass:
> > def __init__(self):
> > # Some code over here
> > def __init__(self, a, b):
> > # Some code over here
> > def __init__(self, a, b, c):
> > # some code here
>
> You can only use one __init__ method. You'd have it count the args:
>
> class BaseClass:
> def __init__(self, *args):
> if len(args) == 2:
> a, b = args
> # some code
> elif len(args) == 3:
> a, b, c = args
> # more code

Weeellll... more readably, you can use:

 1. Named arguments (aka "keywords arguments" -- though a keyword arg
    isn't a keyword, of course...)

 2. Factory (class methods) (I'm using those parentheses around "class
    methods" for precedence, not annotation -- unlike here ;-)

 3. Plain old factory methods

 4. Factory "functions" implemented as classes with a __call__ method

 5. Factory classes with named factory methods (perhaps even class
    methods)

 6. Plain old factory functions

It's all terribly restrictive, as you can see <wink>

(Yes, I know the OP used the same name to call all the constructors in
his examples -- but that's just an expectation carried over from other
languages)

John
Received on Sat Oct 15 04:01:05 2005