Adding a non-existing attribute to an object or class is as easy as something.new_attr = some_value or setattr(something, 'new_attr', some_value). To add a non-existing method to an object or class, just call one of the following functions:
def add_method(target, method_name):
"""add class method to a target class or attach a function to a target object"""
setattr(target, method_name, types.MethodType(lambda x:x, target))
def add_instance_method(target, method_name):
"""add instance method to a target class"""
setattr(target, method_name, types.MethodType(lambda x:x, None, target))
Now, add_method(Something, 'new_method') will add a (dummy) class-level 'new_method' to class Something, add_method(something, 'new_method') will add a 'new_method' to object something of type Something(but not for other instances of Something), add_instance_method(Something, 'new_method') will add a instance-level 'new_method' to class Something(i.e. available for all the instances of Something).
Note: the above doesn't work for instances that has not __dict__ attribute(e.g. instance of built-in class object).
Please check the other question on stackoverflow: Adding a Method to an Existing Object Instance