[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

Reply via email to