Structuring Your Project
Most of the advice here seems okay but this stuck out to me:    foo += 'ooo'  # This is bad, instead you should do:
    foo = ''.join([foo, 'ooo'])

This seems like such a silly micro-optimization. I also have to question its validity, even in scenarios where you're working with huge strings.