changeset: 96195:d6a9d225413a parent: 96193:f23533fa6afa parent: 96194:fb9addfdfc35 user: Yury Selivanov date: Thu May 21 15:45:08 2015 -0400 files: Lib/inspect.py Lib/test/test_inspect.py Misc/NEWS description: Issue 23898: Fix inspect.classify_class_attrs() to work with __eq__ Patch by Mike Bayer. diff -r f23533fa6afa -r d6a9d225413a Lib/inspect.py --- a/Lib/inspect.py Thu May 21 20:54:48 2015 +0300 +++ b/Lib/inspect.py Thu May 21 15:45:08 2015 -0400 @@ -395,7 +395,7 @@ # first look in the classes for srch_cls in class_bases: srch_obj = getattr(srch_cls, name, None) - if srch_obj == get_obj: + if srch_obj is get_obj: last_cls = srch_cls # then check the metaclasses for srch_cls in metamro: @@ -403,7 +403,7 @@ srch_obj = srch_cls.__getattr__(cls, name) except AttributeError: continue - if srch_obj == get_obj: + if srch_obj is get_obj: last_cls = srch_cls if last_cls is not None: homecls = last_cls @@ -417,7 +417,7 @@ # unable to locate the attribute anywhere, most likely due to # buggy custom __dir__; discard and move on continue - obj = get_obj or dict_obj + obj = get_obj if get_obj is not None else dict_obj # Classify the object or its descriptor. if isinstance(dict_obj, staticmethod): kind = "static method" diff -r f23533fa6afa -r d6a9d225413a Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Thu May 21 20:54:48 2015 +0300 +++ b/Lib/test/test_inspect.py Thu May 21 15:45:08 2015 -0400 @@ -888,6 +888,21 @@ should_find_ga = inspect.Attribute('ham', 'data', Meta, 'spam') self.assertIn(should_find_ga, inspect.classify_class_attrs(VA)) + def test_classify_overrides_bool(self): + class NoBool(object): + def __eq__(self, other): + return NoBool() + + def __bool__(self): + raise NotImplementedError( + "This object does not specify a boolean value") + + class HasNB(object): + dd = NoBool() + + should_find_attr = inspect.Attribute('dd', 'data', HasNB, HasNB.dd) + self.assertIn(should_find_attr, inspect.classify_class_attrs(HasNB)) + def test_classify_metaclass_class_attribute(self): class Meta(type): fish = 'slap' diff -r f23533fa6afa -r d6a9d225413a Misc/NEWS --- a/Misc/NEWS Thu May 21 20:54:48 2015 +0300 +++ b/Misc/NEWS Thu May 21 15:45:08 2015 -0400 @@ -52,6 +52,9 @@ - Issue #24017: PEP 492: Coroutines with async and await syntax. +- Issue #23898: Fix inspect.classify_class_attrs() to support attributes + with overloaded __eq__ and __bool__. Patch by Mike Bayer. + Library -------