Python Oop Best Practices