identifying new not inherited methods

John Roth JohnRoth1 at jhrothjr.com
Wed Sep 27 08:58:57 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.
>
> k

When I want to do this, I scan the __dict__
attribute of the class. If all you care about is
instance methods (which is all I care about
at the moment), they're just ordinary functions.
Do an isinstance and you've got it.

If you want to dig deeper and look at class
methods, static methods, descriptors and
other stuff, it's a bit more complicated, but
not much.

John Roth
Python FIT




More information about the Python-list mailing list