-
-
Notifications
You must be signed in to change notification settings - Fork 30.6k
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
patch does not correctly restore state on objects without __dict__ #126886
Comments
This comment was marked as off-topic.
This comment was marked as off-topic.
Except we're not a proxy class. In particular it makes no logical sense to delete these configs. Making delattr throw on all calls probably makes more sense for the usecase, then defining it to either reset to default, or to allow deletion. |
@bhagwant4040 Don't use LLMs to help with issues--they're not particularly helpful. If you want to help triage issues, see the devguide :) |
@picnixz - No pressure, but curious if patches would be welcome here, or if the risk of breakage is high enough that pateches are unlikely to be accepted :). |
The issue I see here is that the object being patched has custom special setters and deleters. The current library seems to special case some attributes so it's already a bit fragile. Ideally I would also have expected the original value to be set (via some setattr, possibly suppressing AttributeError raised by custom setattr) but this may break some code out there though I don't know how much. I think users expect the patch to restore the old value even if you have custom By the way, from a OOP PoV, I wouldn't have changed Now, before opening a PR, I think this should be discussed on https://discuss.python.org/c/ideas/6. |
Bug report
Bug description:
Expected
Actual
Note that this is a relatively niche issue, but for example in a config system (i.e. pytorch/pytorch#140779), if you don't want to have a delete work, (i.e. have it set it back to a default value), the code in
cpython/Lib/unittest/mock.py
Line 1637 in 94a7a4e
Possible fixes:
If delattr throws (maybe NotImplementederror), call setattr instead (this is nice and explicit + removes the hacky workaround I have to do).
If the value after it's been deleted doesn't equal the original value, reassign it? (this might require objects to be comparable, not sure if that is already an issue here).
Either way I wanted to see if there was any interest in fixing this, and if anyone saw a solution that seemed reasonable enough.
CPython versions tested on:
3.12
Operating systems tested on:
Linux
The text was updated successfully, but these errors were encountered: