Newbie question: how to determine "is-a" relationship

Steve Purcell stephen_purcell at yahoo.com
Thu Apr 19 12:13:56 EDT 2001


Jake Baker wrote:
> Gosh. I've been using Python since 96 and I don't know this! Wow!
> 
> Say I have a class heirarchy that looks like A, B <- A, C <- A, etc....
> 
> I have a list of objects (which I know arbitrarily are all A or sublasses of A) and want to filter them based on which subclass they are.
> 
> How do I go about doing this? You help is greatly appreciated!


Use the 'filter' built-in function with a class like this:

    class SubclassFilter:
      def __init__(self, subclass):
	self.subclass = subclass
      def isinstance(self, obj):
	return isinstance(obj, self.subclass)

e.g.


>>> class A: pass
... 
>>> class B(A): pass
... 
>>> class C(A): pass
... 
>>> class D(C): pass
... 
>>> objects = [A(), B(), C(), D()]
>>> for c in (A, B, C, D):
...   print c, filter(SubclassFilter(c).isinstance, objects)
... 
__main__.A [<__main__.A instance at 8071b08>,
            <__main__.B instance at 8072bc0>,
            <__main__.C instance at 8072b30>,
            <__main__.D instance at 8072b48>]
__main__.B [<__main__.B instance at 8072bc0>]
__main__.C [<__main__.C instance at 8072b30>,
            <__main__.D instance at 8072b48>]
__main__.D [<__main__.D instance at 8072b48>]


(above output reformatted by hand)

-Steve

-- 
Steve Purcell, Pythangelist
Get testing at http://pyunit.sourceforge.net/
Any opinions expressed herein are my own and not necessarily those of Yahoo




More information about the Python-list mailing list