Feeding differeent data types to a class instance?

Rhodri James rhodri at wildebst.demon.co.uk
Sat Mar 13 19:54:40 EST 2010


On 2010年3月14日 00:34:55 -0000, kuru <maymunbeyin at gmail.com> wrote:
> Hi
>> I have couple classes in the form of
>> class Vector:
> def __init__(self,x,y,z):
> self.x=x
> self.y=y
> self.z=z
>> This works fine for me. However I want to be able to provide a list,
> tuple as well as individual arguments like below
>> myvec=Vector(1,2,3)
>> This works well
>>> However I also want to be able to do
>> vect=[1,2,3]
>> myvec=Vec(vect)

You can do something like:
class Vector(object):
 def __init__(self, x, y=None, z=None):
 if isinstance(x, list):
 self.x = x[0]
 self.y = x[1]
 self.z = x[2]
 else:
 self.x = x
 self.y = y
 self.z = z
but this gets messy quite quickly. The usual wisdom these days is to 
write yourself a separate class method to create your object from a 
different type:
class Vector(object):
 ... def __init__ as you did before ...
 @classmethod
 def from_list(cls, lst):
 return cls(lst[0], lst[1], lst[2])
vect = [1,2,3]
myvec = Vector.from_list(vect)
-- 
Rhodri James *-* Wildebeeste Herder to the Masses


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /