obj==eval(repr(obj))
__slots__定长数组,代替__dict__
_内部实现
__名称重整
_clsname__private/method
不能通过继承覆写
子类包含父类属性的引用?默认可读写?隐式创建父类对象?从模板中导入类:类对象隐式实例化?
__对子类隐藏:继承间的可见性控制
对类访问:静态方法,类变量
访问控制:作用域——可见性;存取器——控制访问方式(增,删,改,查)
将属性定义为property特性
init
self.name=name #调用setter方法
key value:对象(方法)
@property getter !getter必要
def name(self)
return self._name 实例变量的属性
@name.setter
if not isinstance(val,type)
raise TypeError("")
@name.deleter
del a.name
property:一组重载的实例方法
触发调用clsname.name.fset/fget/fdel
能否直接修改a._name?
方法与实际属性不可重名
将已有的存取器打包,定义为property:name=property(get_name,set_name,del_name)
可以用来定义计算的属性,不会实际保存,在每次访问时计算
因为返回结果是表达式,所以无法保存?存取器使用了闭包?
使用实例属性的接口统一,不需调用运算符()
两种property的实现原理一致么?一致,所以不用setter?
存取器是否实际保存?
如果property出现大量重复代码:替换方案:描述符,闭包
原文:https://www.cnblogs.com/qmcj/p/9205500.html