On Sun, 12 Sep 2010 09:03:49 am Walter Prins wrote: > So, perhaps it's an idea to call dir() on a given object and see > whether the object provides the necessary methods to function, e.g. > __iter__, __delitem__, __setitem__ and friends?
There's no need to do this: attributes = dir(obj) if '__iter__' in attributes and '__len__' in attributes: print "Quacks like a list" else: print "Not like a list" when you can do this: if hasattr(obj, '__iter__') and hasattr(obj, '__len__'): print "Quacks like a list" else: print "Not like a list" or this: try: obj.__iter__ obj.__len__ except AttributeError: print "Not like a list" else: print "Quacks like a list" or even try: iter(obj) len(obj) except TypeError: print "Not like a list" else: print "Quacks like a list" Where possible, the last version is to be preferred, because it doesn't care about internal details which might change. -- Steven D'Aprano _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor