【发布时间】:2018-10-25 11:08:09
【问题描述】:
我了解到 Python 中没有严格执行封装。 slots 通常用于更快的属性访问和内存节省,如here 所示。但是可以通过使用插槽和装饰器来严格执行封装,如下代码所示:
class GetSet(object):
__slots__ = ["attrval"]
def __init__(self,value):
self.attrval = value
@property
def var(self):
#print 'getting the "var" attribute'
return self.attrval
@var.setter
def var(self,value):
#print 'setting the "var" attribute'
self.attrval = value
@var.deleter
def var(self):
#print 'deleting the "var" attribute'
self.attrval = None
GetSet 的实例不会有动态变量设置(由于槽),而且 setter 和 getter 方法将调用类中的方法定义。封装不是完全调用了吗?
【问题讨论】:
标签: python oop decorator encapsulation slots