you add to your class instancesin practiceyou might find it easier to code your add methods to accept just one real argument ( add(self, ))and add that one argument to the instance' current data ( self data ydoes this make more sense than passing two arguments to addwould you say this makes your classes more "object-oriented" operator overloading write class called mylist that shadows ("wraps" python listit should overload most list operators and operationsincluding +indexingiterationslicingand list methods such as append and sort see the python reference manual or other documentation for list of all possible methods to support alsoprovide constructor for your class that takes an existing list (or mylist instanceand copies its components into an instance attribute experiment with your class interactively things to explorea why is copying the initial value important hereb can you use an empty slice ( start[:]to copy the initial value if it' mylist instancec is there general way to route list method calls to the wrapped listd can you add mylist and regular listhow about list and mylist instancee what type of object should operations like and slicing returnwhat about indexing operationsf if you are working with reasonably recent python release (version or later)you may implement this sort of wrapper class by embedding real list in standalone classor by extending the built-in list type with subclass which is easierand why subclassing make subclass of mylist from exercise called mylistsubwhich extends mylist to print message to stdout before each call to the overloaded operation and counts the number of such calls mylistsub should inherit basic method behavior from mylist adding sequence to mylistsub should print messageincrement the counter for callsand perform the superclass' method alsointroduce new method that prints the operation counters to stdoutand experiment with your class interactively do your counters count calls per instanceor per class (for all instances of the class)how would you program the other option(hintit depends on which object the count members are assigned toclass members are shared by instancesbut self members are per-instance data attribute methods write class called attrs with methods that intercept every attribute qualification (both fetches and assignments)and print messages listing their arguments to stdout create an attrs instanceand experiment with qualifying it interactively what happens when you try to use the instance in expressionstry addingindexingand slicing the instance of your class (notea fully generic approach based upon __getattr__ will work in ' classic classes but not in ' new-style classes--which are optional in --for reasons noted in chaptest your knowledgepart vi exercises