Alan G wrote: > So If I have a heirarchy of shapes and want a class method that > only operates on the shape class itself, not on all the > subclasses then I have to use staticmethod whereas if I want > the class method to act on shape and each of its sub classes > I must use a classmethod. The canonical example being counting > instances. staticmethod would only allow me to count shapes > but class method would allow me to count all the sub classes > separately.
Sounds good so far. Mind you this would require reprogramming the > class method for each new shape which is probably a bad > idea - overriding would be a better approach IMHO... Not sure why you think you have to write a new classmethod for each shape. Suppose you want to maintain creation counts for each class. Here is one way to do it using classmethods: class Shape(object): _count = 0 # Default for classes with no instances (cls.count() never called) @classmethod def count(cls): try: cls._count += 1 except AttributeError: cls._count = 1 @classmethod def showCount(cls): print 'Class %s has count = %s' % (cls.__name__, cls._count) def __init__(self): self.count() class Point(Shape): pass class Line(Shape): pass p, p2, p = Point(), Point(), Point() Point.showCount() Line.showCount() l = Line() Line.showCount() ### prints Class Point has count = 3 Class Line has count = 0 Class Line has count = 1 Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor