一.组合
1.1概念
指的是一个对象拥有一个属性,这个属性的值是另一个类的对象
class Foo:
pass
class Bar:
pass
obj=Foo()
obj.attr=Bar()
1.2作用
使用组合是为了通过为某一个类的属性添加另一个类的对象为值,从而起到关联/整合/组合两个类的作用,同时减少了代码冗余
二.多态
2.1多态
指的是同一类/种事物的不同形态
2.2多态性
在多态的前提下,可以在不考虑对象具体类型的前提下直接使用对象
2.3多态性精髓
统一
2.4总结
多态中的父类具有规范其子类的作用,父类不需要实例化以及实现内部方法
三.封装
3.1概念
装:将名字存入容器/名称空间
封:将存入名称空间的名字隐藏起来,隐藏对外不对内
3.2封装方式
在需要封装的数据属性或函数属性名字前加__
3.3总结
1.用__封装只是语法意义上的变形(改变名称空间中名字),并不会真的限制外部访问调用
2.该语法变形只会发生在定义时检测语法阶段发生,之后新增的值并不会变形
3.如果父类不想被子类将自己的属性覆盖,可以将属性隐藏(应用)
3.4封装数据属性
将数据属性封装起来后,类外就无法直接修改类中属性,可以设置一个接口用来修改,在接口中可以设置任意逻辑条件来限制属性的修改
3.5封装函数属性
可以隔离复杂度
四.property
是用来将函数属性伪装成数据属性的装饰器
class People:
@property
def bmi(self):
return bmi
obj=People()
print(obj.bmi)
五.绑定方法
绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
5.1绑定给对象
类中函数属性默认绑定给对象
5.2绑定给类
为类中需要绑定给类的函数前调用装饰器classmethod
5.3无绑定
指一个函数同类与对象都不绑定,谁都可以调用这个普通函数,无自动传值,加装饰器staticmethod
六.反射
通过字符串来反射/映射/到对象/类的属性上
6.1查
hasattr:判断一个属性是否在对象/类中,返回值为True/False
getattr:查询一个属性是否在对象/类中.存在则取出对应值,否则报错,可设置取不到返回None
6.2增,改
setattr:改变原有属性值,或者增加新属性
6.3删
delattr:删除属性
6.4类与对象判断关系
isinstance:判断一个对象是否是另一个类调用产生
issubclass:判断两人类是否为父子关系(继承)
七.内置方法:
7.1自动打印
__str__函数:当对象被打印时会自动打印出函数预设信息
7.2回收
__del__:在对象被删除时先自动回收对象之外其他资源,例如系统资源