On Thu, Sep 20, 2012 at 10:41 AM, Ara Kooser <ghashsn...@gmail.com> wrote: > > I have a list that tracks the ants but I did this is a very crude way. I > basically copied and pasted everything in there like this: > > ants = > [Ant("Red_1","Red","yellow_food"),Ant("Yellow_1","Yellow","red_food"), > Ant("Red_2","Red","yellow_food"),Ant("Yellow_2","Yellow","red_food"),
Having the type as instance data is limiting. Consider creating the subclasses RedAnt and YellowAnt, instead. For example, "red_food" can be a default argument for YellowAnt. You can also use a class counter variable that gets incremented for each new ant. Then the names can be automatic, too, but with the option to use a specific name. class Ant(object): _count = 0 def __init__(self, name=None, food='food'): cls = self.__class__ if cls == Ant: raise NotImplementedError cls._count += 1 if name is None: self.name = "%s_%s" % (cls.__name__, cls._count) else: self.name = name self.food = food def __repr__(self): clsname = self.__class__.__name__ name = repr(self.name) food = repr(self.food) return "%s(%s, %s)" % (clsname, name, food) def __str__(self): return str(self.name) class RedAnt(Ant): def __init__(self, name=None, food="yellow_food"): super(RedAnt, self).__init__(name, food) class YellowAnt(Ant): def __init__(self, name=None, food="red_food"): super(YellowAnt, self).__init__(name, food) For example: >>> ants = [cls() for i in range(2) for cls in (RedAnt, YellowAnt)] >>> ants [RedAnt('RedAnt_1', 'yellow_food'), YellowAnt('YellowAnt_1', 'red_food'), RedAnt('RedAnt_2', 'yellow_food'), YellowAnt('YellowAnt_2', 'red_food')] >>> print ', '.join(str(a) for a in ants) RedAnt_1, YellowAnt_1, RedAnt_2, YellowAnt_2 >>> Ant() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 8, in __init__ NotImplementedError >>> RedAnt('Tom', 'mice') RedAnt('Tom', 'mice') >>> YellowAnt('Jerry', 'cheese') YellowAnt('Jerry', 'cheese') >>> RedAnt._count, YellowAnt._count, Ant._count (3, 3, 0) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor