>>27
The few builtin functions like len, dir, etc. actually call __len__, __str__, and so, which you can call either way. Don't use len(myobj) if you don't like it, just call myobj.__len__ or alias it.
And why is accessing variables in a object directly considered "Pythonic"?
Because that's what they are for. It's far more convenient to do window.x=2 than window.GetX(2) . Not only it's syntactically 10x better, simpler, and easier to read, but it's also an lvalue which neither these damned Get or Set methods are. Like I said, you are to use them. If the implementation changes, you should respect what they used to mean. It'd suck if something's in litres and the next version is in cubic centimetres. You'd have to change the rest of your program anyways. And you can always override accessing to members (the dot).
Being able to access private variables and being a reflexive language are unrelated concepts, fanboy.
Hardly a fanboy. And yes, you want to be able to hack just about anything and access just about anything. This doesn't meant you shouldn't know what you're doing. Actually, I think you're the fanboy one if you think the language is worse because it offers a feature you don't like. Just don't use it. Like goto, found in many languages, it's hardly necessary and rarely a good idea, but once every some 50000 lines it is. Stop whining.