of manual class augmentation--it adds two methods to two classesafter they have been createdextend manually adding new methods to classes class client def __init__(selfvalue)self value value def spam(self)return self value class client value 'ni?def eggsfunc(obj)return obj value def hamfunc(objvalue)return value 'hamclient eggs eggsfunc client ham hamfunc client eggs eggsfunc client ham hamfunc client ('ni!'print( spam()print( eggs()print( ham('bacon') client (print( eggs()print( ham('bacon')this works because methods can always be assigned to class after it' been createdas long as the methods assigned are functions with an extra first argument to receive the subject self instance--this argument can be used to access state information accessible from the class instanceeven though the function is defined independently of the class when this code runswe receive the output of method coded inside the first classas well as the two methods added to the classes after the factc:\codepy - extend-manual py ni!nini!ni!ni!nibaconham ni?ni?ni?nibaconham this scheme works well in isolated cases and can be used to fill out class arbitrarily at runtime it suffers from potentially major downsidethoughwe have to repeat the metaclasses