-
-
Notifications
You must be signed in to change notification settings - Fork 31.7k
inspect() changes in Python3.4 are not compatible with objects that implement special __bool__, __eq__ #68086
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
this bug appeared in Python 3.4. The inspect.classify_class_attrs compares the identity objects of unknown type using the Demo: class MySpecialObject(object):
def __eq__(self, other):
return MySpecialObject()
def __bool__(self):
raise NotImplementedError(
"This object does not specify a boolean value")
class MyClass(object):
some_thing = MySpecialObject()
import inspect
print(inspect.classify_class_attrs(MyClass)) # ultimate goal: help(MyClass) A patch here would be to compare unknown objects for identity using the --- inspect_orig.py 2015-04-09 10:28:46.000000000 -0400
+++ inspect.py 2015-04-09 10:29:37.000000000 -0400
@@ -380,7 +380,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:
@@ -388,7 +388,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
@@ -402,7 +402,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" |
This looks reasonable to me. It would be great if the patch could be attached to the issue as a patch file, including some tests. |
the mantra we all share. I'll take a look. |
patch w/ test |
The patch looks good, Mike. Could you please sign PSF Contributor Agreement? |
hi Yury - I did sign it earlier today. It should have been sent off to the person that manages that, at least that's what the email receipt said. |
Mike, please ping me when they process it. I'll commit your patch. |
hi Yury - I have a confirmation including a PDF attachment of the agreement, the message reads: " Python Contributor Agreement Form between Python Software Foundation and Michael Bayer is Signed and Filed! From: Ewa Jodlowska (Python Software Foundation) can I forward that to you? |
my star went through. let's merge. |
New changeset fb9addfdfc35 by Yury Selivanov in branch '3.4': New changeset d6a9d225413a by Yury Selivanov in branch 'default': |
Merged. Thanks for the bug report and patch, Mike! |
thanks for the merge! |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: