Can I add custom methods/attributes to built-in Python types? Can I add custom methods/attributes to built-in Python types? python python

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))