if I want to set an attribute for a instance:
I can use __setattr__(key, value) or self.__dict__[key]=value
I want to know how __setattr__ works, if __setattr__ just set the k,v in __dict__, whats the differencet between two ways? What is the meaning of setattr's existence?