clarete / forbiddenfruit

Patch built-in python objects
https://clarete.li/forbiddenfruit/
GNU General Public License v3.0
817 stars 52 forks source link

Cursing int __iter__ silently fails. #25

Open 0xf0f opened 5 years ago

0xf0f commented 5 years ago
>>> def int_iter(self):
    i = 0
    while i < self:
        yield i
        i += 1

>>> curse(int, '__iter__', int_iter)
>>> for i in 12:
    print('1231')

Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    for i in 12:
TypeError: 'int' object is not iterable

Not sure if this is a bug or just unimplemented. Maybe raising a NotImplementedError exception would be helpful if it's the latter.

clarete commented 5 years ago

Thanks for reporting! That's a good one! The handling of dunder methods was introduced quite recently (https://github.com/clarete/forbiddenfruit/pull/24) and it didn't include the __iter__ protocol. Let me know if you have any interest in suggesting a fix, I can walk you through the code! I think that'd be the fastest way to get these changes in!

alexchandel commented 4 years ago

@clarete Is anything required for implementing __repr__, __hash__, __call__, __iter__, __next__, or other missing dunder methods than adding them to PyTypeObject._fields_ and override_dict?