Python类和对象三(十二)
私有变量:
在py中的私有变量,就是想要私有的那个变量,偷偷的改了个名字
名字改编是发生在实例化对象的时候的事情
c._dic_是存放对象c这个属性的位置,还可以通过给字典添加键值对的方法用来给对象添加属性
字典跟集合高效的背后玄机,就是那空间来换时间,除了费内存,如果我们知道一个对象设计出来只是需要几个固定的属性,将来没有动态添加属性这种需求,那么利用字典来存放属性这种空间上的牺牲就是纯纯的浪费
py中专门设计了一个slots类属性,避免了利用字典来存放造成控件浪费
因为使用了slots属性,对象就会划分一个固定大小的空间来存放指定的属性,这个时候_dic_属性就不需要了,空间也就节约出来,但是牺牲了配py动态语言的特性了
e中可以动态添加属性,以为solts不会再子类中生效
类的魔法方法:
构造方法:
之所以可以对不可变对象进行修改,是我们赶在实例对象被创建之前进行了拦截,然后我们才去嗲用这个super._new()_去创建真正的实例对象,由于CapStr是继承于str字符串类的,字符串该有的方法也继承了
销毁方法:
对象被销毁的时候调用del方法
对象如果还有引入,是不会调用销毁方法的
还可以实现销毁对象时,实现对象的重生:
py的闭包,可以通过某种方式,将外层变量的给保存下来
定义闭包函数是为了让self保存在外部的函数的x变量中,内部函数的作用是为了窃取这个self对象,在del方法中调用它的时候是带参数的,就把这个参数存储起来,如果在外部调用这个函数不带参数就是用默认值None,那么他会返回刚刚拿到的self对象
运算相关的魔法方法:
s2是相同的对象,不会调用radd方法