这是怎么回事?从客观和功能角度来看?如何在Python中进行封装?
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
这样做会有什么问题?
有什么更好的方法来实现Python中的封装?
...你是什么意思?你认为什么是错的?它运行吗? – jonrsharpe 2014-10-06 12:53:34
可能在[codereview](http://codereview.stackexchange.com/)中提出 – 2014-10-06 12:56:28
它似乎工作正常,是的,但我经常看到有人说“python没有封装”,所以推测它不能“不要这样简单。 – will 2014-10-06 12:57:39