Can I add custom methods/attributes to built-in Python types?
You can't directly add the method to the original type. However, you can subclass the type then substitute it in the built-in/global namespace, which achieves most of the effect desired. Unfortunately, objects created by literal syntax will continue to be of the vanilla type and won't have your new methods/attributes.
Here's what it looks like
# Built-in namespaceimport __builtin__# Extended subclassclass mystr(str): def first_last(self): if self: return self[0] + self[-1] else: return ''# Substitute the original str with the subclass on the built-in namespace __builtin__.str = mystrprint str(1234).first_last()print str(0).first_last()print str('').first_last()print '0'.first_last()output = """1400Traceback (most recent call last): File "strp.py", line 16, in <module> print '0'.first_last()AttributeError: 'str' object has no attribute 'first_last'"""
Just tried the forbbidenfruit!
here is the code, very simple!
from forbiddenfruit import cursedef list_size(self): return len(self)def string_hello(self): print("Hello, {}".format(self))if __name__ == "__main__": curse(list, "size", list_size) a = [1, 2, 3] print(a.size()) curse(str, "hello", string_hello) "Jesse".hello()
Yes indeed, but you have to define a new class of the same type and it should inherit from that type.
For example:
class list(list): def __init__(self, *args): super().__init__(args) def map(self, function): return [function(i) for i in self]a = list(1, 2, 3, 4, 5)def double(i): return i * 2print(a.map(double))