Comments (9)
Hi, I assume it applies to all "dunders"? I.e. I tried to patch __matmul__
on FunctionType
to implement function chaining. And although f.__matmul__(g)
does the right think, f @ g
doesn't seem to pick up the existence of the overwritten implementation.
Of course, f.chain(g)
would do, too, but the ability to override the operator behaviour would add a wholly another level of the black magic and let me maniacally laugh at the code reviewer's tears, so it would be incredibly useful, as you might imagine.
from forbiddenfruit.
I happen to be working in the same area. Looking to add __next__
which is proving troublesome because it can raise an exception. But I've added __repr__
and __hash__
on phy1729/complete-PyTypeObject
from forbiddenfruit.
please also add __getattr__
for patching
from forbiddenfruit.
Hello, sorry for the late response. forbiddenfruit
is a really [lame] simple hack that exposes the __dict__
attribute of a python class. Magic methods and special protocols are resolved separately. forbiddenfruit
would have to special case these methods and overwrite the right properties in the PyObject
struct to allow patching these special guys.
It's possible but might take some digging to find out what to overwrite.
from forbiddenfruit.
This is resolved for methods defined in ff's PyTypeObject._fields_
or one of its method suites (e.g. PyNumberMethods
) and added to override_dict
. __repr__
, __hash__
, __call__
, __iter__
, and __next__
are still missing.
from forbiddenfruit.
Just a quick +1 for getting __repr__
working; it would enable symbolic reasoning about repr strings in CrossHair.
from forbiddenfruit.
__hash__
also doesnt work
from forbiddenfruit.
Right now, im trying to patch hash on the forbiddenfruit module
from forbiddenfruit.
+1 for __call__
from forbiddenfruit.
Related Issues (20)
- test fails with py3.8 and pytest HOT 3
- str.__mod__ method is not patchable! HOT 1
- Unable to perfectly re-curse to __add__ HOT 2
- Cursing int with __iter__ fails with an error HOT 1
- Possible simplification of patchable_builtin() HOT 2
- Provide wheel packages? HOT 8
- Exceptions raised in cursed-in dunder methods are not raised to calling code
- Crash on Windows if dunder methods cursed into `ctypes.c_int` raises an exception
- Fix simple typo: infomation -> information HOT 1
- Replacing __hash__ returns a key error HOT 1
- Cursing dunder methods fails with: KeyError: '<method_to_curse>' HOT 5
- Patch for str __add__ not working
- object has no attribute '__dict__' HOT 1
- how to use reverse with existing attributes HOT 2
- MacOS errors monkeypatching `object`
- Undiagnosed crash (Windows 11, Python 3.10)
- How to make the additional function can be autocompleted in VS Code? HOT 1
- Add `pyproject.toml` or implement wheel-based distribution
- Unable to curse __call__
- __init_subclass__ seems to not be implemented as a cursable magic method
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from forbiddenfruit.