Why does python not have a mechanism for data hiding?

Antoon Pardon apardon at forel.vub.ac.be
Mon Jun 2 12:40:07 CEST 2008


On 2008-06-02, Carl Banks <pavlovevidence at gmail.com> wrote:
> On Jun 2, 5:38 am, Antoon Pardon <apar... at forel.vub.ac.be> wrote:
>> If you really need it, you can do data hiding in python. It just
>> requires a bit more work.
>>
>> ----------------------------- Hide.py ---------------------------------
>> class Rec(object):
>>      def __init__(__, **kwargs):
>>          for key,value in kwargs.items():
>>              setattr(__, key, value)
>>
>>      def __getitem__(self, key):
>>          return getattr(self, key)
>>
>>      def __setitem__ (self, key, val):
>>          setattr(self, key, val)
>>
>> class Foo(object):
>>
>>   def __init__(self):
>>
>>     hidden = Rec(x=0, y=0)
>>
>>     def SetX(val):
>>       hidden.x = val
>>
>>     def SetY(val):
>>       hidden.y = val
>>
>>     def GetX():
>>       return hidden.x
>>
>>     def GetY():
>>       return hidden.y
>>
>>     self.SetX = SetX
>>     self.SetY = SetY
>>     self.GetX = GetX
>>     self.GetY = GetY
>
> Red Herring.
>
> 1. This doesn't hide the variables; it just changes their spelling.
> 2. This also "hides" the variables from its own class.
>
> In other words, it's a useless no-op.
>
> In fact, I'd say this is even worse than useless.  Creating accessor
> functions is a sort of blessing for external use.  Knowing that there
> are accessor functions is likely to cause a user to show even less
> restraint.

I think you completed missed the point.

This is just a proof of concept thing. In a real example there would
of course no Set en Get methods but just methods that in the course
of their execution would access or update the hidden attributes 

-- 
Antoon Pardon



More information about the Python-list mailing list