identifying new not inherited methods
Steve Holden
steve at holdenweb.com
Tue Sep 26 12:41:35 EDT 2006
malkarouri at gmail.com 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()
sholden at bigboy ~
$ python test01.py
A additionals: []
B additionals: ['cmd1', 'cmd2']
sholden at bigboy ~
$
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
More information about the Python-list
mailing list