function overloading

John Roth johnroth at ameritech.net
Thu Jul 3 10:21:53 EDT 2003


"Duncan Booth" <duncan at NOSPAMrcp.co.uk> wrote in message
news:Xns93AC619ABDB55duncanrcpcouk at 127.0.0.1...
> "Simon Burton" <simonb at webone.com.au> wrote in
> news:pan.2003.07.01.19.42.06.202399 at webone.com.au:
>
> > class Im:
> >   def __init__(self,x,xx=None):
> >     if xx is not None:
> >       w,h = x,xx
> >       im = Image.new("I",(w,h))
> >     elif type(x)==str:
> >       filename = x
> >       im = Image.open(filename)
> >     else:
> >       im = x
> >     self.im = im
>
> I would probably do it like this:
>
> class Im(object):
>     def __init__(self,im):
>         self.im = im
>
>     def newFromFile(cls, fileName):
>         im = Image.open(filename)
>         return cls(im)
>     newFromFile = classmethod(newFromFile)
>
>     def newBlank(cls, width=640, height=480):
>         im = Image.new("I",(width,height))
>         return cls(im)
>     newBlank = classmethod(newBlank)
>
> Overloading is a bad idea, explicit is better than implicit.
>
> Using class methods as alternate constructors lets you have meaningful
> parameter names, defaults for each variant (if you want them), and
> docstrings (here left as an exercise for the reader).

I keep forgetting about class methods, probably because they're
new and I don't use Java enough.

John Roth
>
>
> --
> Duncan Booth
duncan at rcp.co.uk
> int month(char
*p){return(124864/((p[0]+p[1]-p[2]&0x1f)+1)%12)["\5\x8\3"
> "\6\7\xb\1\x9\xa\2\0\4"];} // Who said my code was obscure?






More information about the Python-list mailing list