>>7good luck having code like foo.x += 1
If you remove public attribute, then of course you have to change the code using that attribute. So what? This is only relevant for library API. In other cases you just refactor the code using that attribute. If you change the implementation, you most likely have to check the caller code anyway, to check that it's still correct (boring edge cases etc.). The good part in public attribute here is that it forces you to check the usage if implementation changes totally. That reduces bugs. Oh, did I mention using getters and setters make the code harder to read, thus introducing more bugs. LOL, I bet your enterprise code is unreadable shit, full of bugs. All because you insist on your stupid OOP principles. Fucking
coder.