Hi, I'm not sure what you're trying to actually achieve, but it seems that you want an identificator for classes, not for instances. In this case, setting the id should be kept out of __init__ since it is an instance initializer: make id static and thus getid() a classmethod. Furthermore, if you have several Foo subclasses and subsubclasses, etc. and still want to use the same identificator scheme, the getid() method would better be defined once for ever in Foo. I propose you the following:
<code> class Foo(object): id = 1 def getid(cls): if cls == Foo: return str(cls.id) return '%s.%d' % (cls.__bases__[0].getid(), cls.id) # get the parent id and append its own id getid = classmethod(getid) class FooSon(Foo): id = 2 class Bar(Foo): id = 3 class Toto(Bar): id = 1 # Show me that this works for cls in [Foo, FooSon, Bar, Toto]: inst = cls() print '%s id: %s\n also can getid from an instance: %s\n' % (cls.__name__, cls.getid(), inst.getid()) </code> One advantage of this approach is that you don't have to redefine the getid() method for each Foo child and descendent. Unfortunately, the "cls.__bases__[0]" part makes getid() to work if and only if the first base class is Foo or a subclass of Foo. You're not using multiple inheritance, are you? RB -- http://mail.python.org/mailman/listinfo/python-list