10.24
组合
什么是组合?
一个对象的属性是来自另外一个类的对象,称之为组合
为什么要的组合?
组合也是用来解决类与类之间代码冗余
怎么用?
class Foo: a=111 def __init__(self,x,y): self.x=x self.y=y def func1(self): print('Foo内的功能') class Bar: b=222 def __init__(self,m,n): self.m=m self.n=n def func2(self): print('Bar中的功能') obj1=Foo(10,20) obj2=Bar(30,40) obj1.xxx=obj2 print(obj1.x,obj1.y,obj1.a,obj1.func1) print(obj1.xxx.m,obj1.xxx.n,obj1.xxx.b,obj1.xxx.func2)
封装
什么是封装?
装是指把属性装进一个容器,封是指隐藏但是这种隐藏是对外部对内的
为什么要封装?
封装不是单纯意义的隐藏
封装数据属性的目的:将数据属性封装起来,类外部的使用就无法直接操作该数据属性了
需要类内部打开一个借口给试用装,类的设计者可以在接口之上附近任意逻辑,从而严格控制试用装对属性的操作
封装的目的?
隔离复杂度
怎么要封装?
只要在属性前加上__开头,该属性就会被隐藏起来
该隐藏有以下几个特点:
1.只是一种语法意义上的变形,即__开头的属性汇总检测语法时发生变形(_类名__属性名)
2.这种隐藏是对外不对内的,因为在类内部检测语法时所有的代码都统一发生了变形
3.这种变形只是在语法检测阶段时发生一次,在类定义之后新增的__开头的属性并不会发生变形
4.如果父类不想让子类覆盖自己的属性,可以在属性前加__开头
property装饰器
多态与多态性