Why does python not have a mechanism for data hiding?

Russ P. Russ.Paielli at gmail.com
Tue Jun 3 01:41:33 CEST 2008

On Jun 2, 4:17 pm, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Jun 2, 6:39 pm, "Russ P." <Russ.Paie... at gmail.com> wrote:
> > On Jun 2, 3:04 pm, Carl Banks <pavlovevide... at gmail.com> wrote:
> > > On Jun 2, 4:50 pm, "Russ P." <Russ.Paie... at gmail.com> wrote:
> > > > On Jun 2, 6:41 am, Carl Banks <pavlovevide... at gmail.com> wrote:
> > > > > You are not realizing that only useful(**) thing about data hiding is
> > > > > that some code has access to the data, other code does not.  If you
> > > > > "hide" data equally from everyone it's just a useless spelling change.
> > > > I think you're missing the point.
> > > Well that's nice: you're accusing me of missing the point after having
> > > quoted something I wrote as if it represented by own views, even
> > > though I footnoted it and said I was only doing it for the sake of
> > > argument.  Perhaps, outside this discussion, I am totally getting "the
> > > point".
> > > I can't tell, though, because I read your post twice and I have no
> > > idea what you consider "the point" to be.
> > > Best as I can tell you are claiming that data hiding isn't important,
> > > but then you go on to imply Python is blemished because it doesn't
> > > hide data.  It really makes no sense: perhaps you can help us out by
> > > giving us an example of something that illustrates what you're saying?
> > I think I made my point abundantly clear. I said that rigorously
> > denied access to encapsulated data is not important, but a clear
> > specification of what is intended for the client and what is intended
> > for internal use *is* important. And an ugly naming convention for
> > variable and function names is not the best way to do it.
> Well let me tell you what's confusing me here: I can't figure out, if
> this is your standpoint, what issue you could have had with what I
> said.  What specifically did you disagree with?  What did I say that
> was wrong?  It seems like we are more in agreement than not.
> > I suggest you ask yourself why C++, Java, Ada, and probably most other
> > "object-oriented" languages, have encapsulation or "data hiding." And
> > no, I am not claiming that *every* application written in Python needs
> > it, but certainly *some* could benefit from it.
> I know what it's there for, chief.  That's exactly what I was saying
> to Antoon, and you took issue with it and claimed I was missing the
> point.  What gives?
> Carl Banks

I thought you were saying that encapsulation or so-called "data
hiding" is worthless. If I misunderstood you, then I apologize. I
don't have time to go back and sort it all out.

Here's what I think Python should have. I think it should have a
keyword, something like "priv," to identify data or functions as
"private." As I said earlier, "private" for class data or functions
("methods") could be implemented like "protected" in C++. That means
that derived classes would have access to it, but clients of the class
would not. If the client really needs or wants access, he could be
given a sort of "back door" access similar to the current Python rule
regarding double leading underscores. Thus, the client would have
access, but he would know very well that he is using something that
the original designer did not intend for him to use.

It's just a suggestion. I'm not a language expert, and I realize that
I could be missing something important.

I also realize, by the way, that Python allows a client of a class to
define a new class member from completely outside the class
definition. Obviously, that cannot be declared private. But if the
same identifier is already declared private within the class, than the
new definition should not be allowed (because it would defeat the
whole idea of "private" class members).

More information about the Python-list mailing list