object-oriented programming enter spotplayer , enter spotplayer further topics special methods -we have seen two special methods alreadythe constructor __init__ and the method __str__ which determines what your objects look like when printed there are many others for instancethere is __add__ that allows your object to use the operator there are special methods for all the python operators there is also method called __len__ which allows your object to work with the built in len function there is even special method__getitem__ that lets your program work with list and string brackets [copying objects -if you want to make copy of an object xit is not enough to do the followingx_copy the reason is discussed in section insteaddo the followingfrom copy import copy x_copy copy(xkeeping your code in multiple files -if you want to reuse class in several programsyou do not have to copy and paste the code into each you can save it in file and use an import statement to import it into your programs the file will need to be somewhere your program can find itlike in the same directory from analyzer import analyzer exercises write class called investment with fields called principal and interest the constructor should set the values of those fields there should be method called value_after that returns the value of the investment after years the formula for this is ( ) where is the principaland is the interest rate it should also use the special method __str__ so that printing the object will result in something like belowprincipal $ interest rate write class called product the class should have fields called nameamountand priceholding the product' namethe number of items of that product in stockand the regular price of the product there should be method get_price that receives the number of items to be bought and returns the cost of buying that many itemswhere the regular price