Need Help with Encapsulation in Python!

Soham Mukherjee sohammm1087 at gmail.com
Fri Jun 17 13:58:15 UTC 2022


```
    self.a = 1
     self.b = 2
     self.c = 3
     pass

   def __getattribute__(self, name):
     if sys._getframe(1).f_code.co_argcount == 0:
       if name in self.privates:
         raise Exception("Access to private attribute \"%s\" is 
not allowed" % name)
       else:
         return object.__getattribute__(self, name)
     else:
       return object.__getattribute__(self, name)

   def __setattr__(self, name, value):
     if sys._getframe(1).f_code.co_argcount == 0:
       if name in self.privates:
         raise Exception("Setting private attribute \"%s\" is not 
allowed" % name)
       elif name in self.protected:
         raise Exception("Setting protected attribute \"%s\" is 
not allowed" % name)
       else:
         return object.__setattr__(self, name, value)
     else:
       return object.__setattr__(self, name, value)


example = EncapsulationClass()

example.a = 10 # Exception: Setting private attribute "a" is not 
allowed
example.b = 10 # Exception: Setting protected attribute "b" is 
not allowed
example.c = 10 # example.c == 10

example.__dict__["privates"] # Exception: Setting protected 
attribute "b" is not allowed
```

What would actually be wrong with doing something like this?

Is there any better way to achieve encapsulation in Python? 
Please rectify my code if possible.



More information about the Digitalmars-d-learn mailing list