identifying new not inherited methods

Tim Chase python.list at tim.thechases.com
Tue Sep 26 12:31:01 EDT 2006


> 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

While I'm not sure if this is the best/most-pythonic way to do 
it, but it did it for me:


#############################################################
class A(object):
	def list_cmds(self):
		root_cmds = set(dir(A))
		child_cmds = set(dir(self))
		return list(child_cmds - root_cmds)
	def __init__(self):
		pass

class B(A):
	def cmd1(self, args):
		pass
	def cmd2(self, args):
		pass

b = B()
print repr(b.list_cmds())
#############################################################


If you have multiple inheritance going on, and you only want the 
methods that the child adds, you might try something like



#############################################################
class A(object):
	def list_cmds(self):
		parent_cmds = set()
		for base in self.__class__.__bases__:
			parent_cmds.update(dir(base))
		child_cmds = set(dir(self))
		return list(child_cmds - parent_cmds)
	def __init__(self):
		pass

class C(object):
	def foo1(self, args): pass
	def foo2(self, args): pass
	
class B(A, C):
	def cmd1(self, args):
		pass
	def cmd2(self, args):
		pass

b = B()
print repr(b.list_cmds())

#############################################################

Just a few ideas,

-tkc







More information about the Python-list mailing list