I wish there was a "do not touch unless you know what you're doing" field. Private fields and members are a nuisance if you need to do some unsupported thing with a library. On the other hand, there are often utility functions in an object that are absolutely only ever meant to be used by that object itself, and not to be called from the outside.
Python supports those by prefacing with "__", IIRC.
Re:Inheritance versus Composition
by scarface74 on Thursday May 09, 2019 @08:51AM
(#19867799)
There's no point in putting a "private/public/protected" security model in a programming language. It isn't a security boundary.
It’s about intention. If I mark a property or method as private, it means that I can get rid of it, rename it or change the expected behavior without considering it a breaking chance.
Re:Inheritance versus Composition
by marcosdumay on Thursday May 09, 2019 @01:10PM
(#19870082)
Yeah, and Python has some standard nomenclature for marking a property as protected and a little bit of behavior for helping mark it as private. You do not need encapsulation for that.
Re:Inheritance versus Composition
by scarface74 on Thursday May 09, 2019 @01:33PM
(#19870278)
And there is nothing about the Pythom runtime stopping someone from using it anyway.
With a statically typed language, you really have to go out of your way to do it like using reflection and if your code breaks on an update you get what you deserve.
Re:Inheritance versus Composition
by kevin_thibedeau on Thursday May 09, 2019 @11:31AM
(#19869154)
YAGNI rules the day.
Re:Inheritance versus Composition
by scarface74 on Thursday May 09, 2019 @12:49PM
(#19869865)
You’ve never had to refactor code that was used as a library by other developers?
Do you realize how many hacks is built into Windows just because developers were using undocumented features?
There's no point in putting a "private/public/protected" security model in a programming language. It isn't a security boundary.
This vastly simplified the design of OO in Python, and it makes testing far far easier. There's no need to go through the dependency injection acrobatics in order to change one method for testing or proxying.
(There technically is a way to munge a property name in Python but its use is discouraged).