[EMAIL PROTECTED] wrote: > Hi, > > I am writing a library in which I need to find the names of methods > which are implemented in a class, rather than inherited from another > class. To explain more, and to find if there is another way of doing > it, here is what I want to do: I am defining two classes, say A and B, > as: > > class A(object): > def list_cmds(self): > 'implementation needed' > ? > def __init__(self): > ... (rest of class) > > class B(A): > def cmd1(self, args): > pass > def cmd2(self, args): > pass > > I need an implementation of list_cmds in A above so that I can get a > result: > > >>>>b=B() >>>>b.list_cmds() > > ['cmd1','cmd2'] #order not important > > I will be happy if anybody can point to me any way of doing it, using > class attributes, metaclasses or otherwise. What I don't want to do is > modifying class B, which contains just the cmds, if possible. > > Many thanks in advance. > $ cat test01.py class A(object): def list_cmds(self): """return callable attributes from subclasses not present in main class.""" Amethods = [m for m in dir(A) if callable(getattr(A, m))] return [m for m in dir(self.__class__) if callable(getattr(self.__class__, m)) and m not in Amethods] def __init__(self): pass
class B(A): def cmd1(self, args): pass def cmd2(self, args): pass print "A additionals:", A().list_cmds() print "B additionals:", B().list_cmds() [EMAIL PROTECTED] ~ $ python test01.py A additionals: [] B additionals: ['cmd1', 'cmd2'] [EMAIL PROTECTED] ~ $ Hope this helps. regards Steve -- Steve Holden +44 150 684 7255 +1 800 494 3119 Holden Web LLC/Ltd http://www.holdenweb.com Skype: holdenweb http://holdenweb.blogspot.com Recent Ramblings http://del.icio.us/steve.holden -- http://mail.python.org/mailman/listinfo/python-list