"Will McGugan" <[EMAIL PROTECTED]> wrote: > A Vector3D can be constructed in 3 ways. If no parameters are given it > assumes a default of (0, 0, 0). If one parameter is given it is assumed > to be an iterable capable of giving 3 values. If 3 values are given > they are assumed to be the initial x, y, z. > > And now for the ponderings... > > 1) Is 'overloading' like this pythonic, or should I supply alternative > contstructors?
No it isn't Pythonic. Why not just require 3 values and move the responsibility onto the caller to pass them correctly? They can still use an iterator if they want: Vector3D(a, b, c) Vector3D(*some_iter) Then your initialiser becomes: def __init__(self, x=0, y=0, z=0): self.x, self.y, self.z = x, y, z much cleaner and also catches accidental use of iterators. Alternatively, insist on always getting exactly 0 or 1 arguments: Vector3D((a,b,c)) Vector3D(some_iter) def __init__(self, (x, y, z)=(0,0,0)): self.x, self.y, self.z = x, y, z which is great if you already have lots of 3-tuples, but a pain otherwise to remember to double the parentheses. -- http://mail.python.org/mailman/listinfo/python-list