What for -- for? (was A bug?)

Rustom Mody rustompmody at gmail.com
Wed Oct 29 07:11:36 CET 2014


On Wednesday, October 29, 2014 11:10:06 AM UTC+5:30, Zachary Ware wrote:
> On Wed, Oct 29, 2014 at 12:15 AM, Rustom Mody wrote:
> > Maybe nicer to filter out the false's with a filter-false thus??
> >
> > def ff(d): return [n for n in d if d[n]]
> 
> Sure.  Or, combining things:
> 
> try:
>     from collections import abc
> except ImportError:
>     import collections as abc
> from abc import ABCMeta
> 
> abcs = [o for o in vars(abc).values() if isinstance(o, ABCMeta)]
> 
> def get_abcs(cls):
>     return [abc for abc in abcs if issubclass(cls, abc)]
> 
> def get_abc_names(cls):
>     return [abc.__name__ for abc in get_abcs(cls)]
> 
> 
> 
> Of course, that's 3 (progressively shorter) loops to get the names of
> the ABCs of a class compared to 1 (fairly short in the first place)
> loop for a map of relationships to all available ABCs, but optimizing
> such a toy as this would just be an exercise in futility :)

Not so.

The charm of introspection is that the introspection
itself can be introspected.
For that to be convincing there needs to be a good combo
of clarity and succinctness.  In particular why not reduce
the two functions to one?

def get_abc_names(cls):
    return [abc.__name__ for abc in abcs if issubclass(cls,abc)]



More information about the Python-list mailing list