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)] -- https://mail.python.org/mailman/listinfo/python-list