I have successfully overridden the __getattr__ method in order to allow for complex behavior.  However I still would like to allow some of the __builtin__ functions to be default.  For example, I have used __getattr__ to handle __add__, __sub__, __mul__, etc.  However, the __iadd__, __isub__, __imul__, etc. are trying to use the __getattr__ method and are throwing an error.  I could just define their behaviors as well, but I think that allowing these methods to run as default would be better.
Bottom line: I would like to allow __getattr__ to filter which attributes it handles, and which it allows to run as default.
Answered my own question.  I used if statements to handle groups of attributes, and then as a last resort, used return getattr(my_cls_name, attr) to allow any other builtin function to run normally.  So now when it realizes there is no __iadd__ handler, it uses my __add__ instead.  same with the other operators.
python: selectively override __getattr__