Why does python not have a mechanism for data hiding?

Carl Banks pavlovevidence at gmail.com
Mon Jun 2 06:02:47 EDT 2008


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.


Carl Banks




More information about the Python-list mailing list