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