Skip to main content
Stack Overflow
  1. About
  2. For Teams

Return to Question

Post Reopened by Heath Hunnicutt, Bartłomiej Semańczyk, Wtower, Jaap, Reeno
Focusing question by making it clearer, so it can be considered for re-open.
Source Link
kenorb
  • 168.8k
  • 96
  • 712
  • 796

Class with How to do encapsulation in Python?

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 def __init__(self):
 self.privates = ["__dict__", "privates", "protected", "a"]
 self.protected = ["b"]
 
 print self.privates
 
 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 actualylactually be wrong with doing something like this?

Is there any better way to achieve encapsulation in Python?

Class with encapsulation in Python

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 def __init__(self):
 self.privates = ["__dict__", "privates", "protected", "a"]
 self.protected = ["b"]
 
 print self.privates
 
 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 actualyl be wrong with doing something like this?

How to do encapsulation in Python?

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 def __init__(self):
 self.privates = ["__dict__", "privates", "protected", "a"]
 self.protected = ["b"]
 
 print self.privates
 
 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?

Post Closed as "Needs details or clarity" by jonrsharpe, piokuc, Veedrac, Diosney, davidism
added 145 characters in body
Source Link
will
  • 10.7k
  • 8
  • 50
  • 75

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 def __init__(self):
 self.privates = ["a"]["__dict__", "privates", "protected", "a"]
 self.protected = ["b"]
 
 def __init__( print self):.privates
 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 EncapsulationClassself.privates:
 raise Exception("Access to private attribute \"%s\" is not allowed" % name)
 else:
 return object.__getattribute__(self, name)
 else:
 return object.__getattribute__(self, name, value)
 
 def __setattr__(self, name, value):
 if sys._getframe(1).f_code.co_argcount == 0:
 if name in EncapsulationClassself.privates:
 raise Exception("Setting private attribute \"%s\" is not allowed" % name)
 elif name in EncapsulationClassself.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 actualyl be wrong with doing something like this?

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 privates = ["a"]
 protected = ["b"]
 
 def __init__(self):
 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 EncapsulationClass.privates:
 raise Exception("Access to private attribute \"%s\" is not allowed" % name)
 else:
 return object.__getattribute__(self, name)
 else:
 object.__getattribute__(self, name, value)
 
 def __setattr__(self, name, value):
 if sys._getframe(1).f_code.co_argcount == 0:
 if name in EncapsulationClass.privates:
 raise Exception("Setting private attribute \"%s\" is not allowed" % name)
 elif name in EncapsulationClass.protected:
 raise Exception("Setting protected attribute \"%s\" is not allowed" % name)
 else:
 object.__setattr__(self, name, value)
 else:
 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

What would actualyl be wrong with doing something like this?

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 def __init__(self):
 self.privates = ["__dict__", "privates", "protected", "a"]
 self.protected = ["b"]
 
  print self.privates
 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 actualyl be wrong with doing something like this?

Source Link
will
  • 10.7k
  • 8
  • 50
  • 75

Class with encapsulation in Python

What's wrong with this? From objective, and functional standpoints?

import sys
class EncapsulationClass(object):
 
 privates = ["a"]
 protected = ["b"]
 
 def __init__(self):
 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 EncapsulationClass.privates:
 raise Exception("Access to private attribute \"%s\" is not allowed" % name)
 else:
 return object.__getattribute__(self, name)
 else:
 object.__getattribute__(self, name, value)
 
 def __setattr__(self, name, value):
 if sys._getframe(1).f_code.co_argcount == 0:
 if name in EncapsulationClass.privates:
 raise Exception("Setting private attribute \"%s\" is not allowed" % name)
 elif name in EncapsulationClass.protected:
 raise Exception("Setting protected attribute \"%s\" is not allowed" % name)
 else:
 object.__setattr__(self, name, value)
 else:
 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

What would actualyl be wrong with doing something like this?

lang-py

AltStyle によって変換されたページ (->オリジナル) /