"Philip Smith" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
> Call this a C++ programmers hang-up if you like.
>
> I don't seem to be able to define multiple versions of __init__ in my 
> matrix

Correct.

> class (ie to initialise either from a list of values or from 2 dimensions 
> (rows/columns)).
>
> Even if Python couldn't resolve the __init__ to use on the basis of 
> argument types surely it could do so on the basis of argument numbers???

Variable parameter counts are handled either with default values or the 
*restlist and **keydict mechanisms.

Keep in mind that the compiler cannot, in general, know, at compile time, 
what function object will be bound to a name at run time.  And that you can 
have only bind a name to one object.

> At any rate - any suggestions how I code this????

The usual way is to write your own dispatch code to either execute the 
appropriate code block or call the appropriate function.

Or you could write a function of functions that returns a function that 
dispatches to one of the functions according to its arg count.  Something 
like (untested, all exceptions passed through):

def arg_count_dispatcher_maker(*funcs):
    def arg_count_dispatcher(*args):
        return funcs[len(args)](*args)
    return arg_count_dispatcher

which you use like this:
    __init__ = arg_count_dispatcher_maker(func0, func1, func2)

Terry J. Reedy 



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to