> I suggest making everything private unless it needs to be broader, just to avoid unintentional access/modification from other classes.
Python has a good solution to this dilemma. Instead of a "private" keyword that gives you a compiler-enforced "this field can't be accessed from other classes," the Python Way is to use an underscore in front of the names of fields that are intended to be internal as a strong suggestion that outside classes shouldn't use it.
When you get right down to it, sometimes it's good to be able to access private fields if you really need to. The underscore tells you "This isn't intended to be part of the public API, so it may break in later releases without warning, and it's also probably totally undocumented so you ought to read the code to be sure it does what you think it does."
There are countless times I've wanted to access a private field in some library, and I have to either re-implement that part of the library, or make my own fork, for no good reason other than the library author made the field private because they weren't creative enough to envision my use case.
Then again, if you're writing application code that's not going to have any downstream users, "private" doesn't matter so much, because if you discover later that you need to access it, you can always just change the declaration yourself.