面向对象 元类

一 什么是面向对象的程序设计及为什么要有它,与面向过程的程序设计优劣对比以及应用场景
   面向对象核心在于对象对象就是一系列功能的集合体,面向对象解决的程序的可扩展性,面向对象程序的复杂度高,面向对象程序主要应用与扩展性极强的应用场景

二 类和对象
3.1 什么是对象,什么是类
对象就是由类实例化产生的一个名称空间 包含了对象私有的属性  对象就是一个群体的具体表现,类就是包含属性与函数的集合体也是一个名称空间,类就是一个群体
3.2 类的属性引用和实例化
类的属性引用使用  类名.属性的方式来引用   但是在对象中直接调用即可   实例化就是创建一个对象该对象具有自己独特的属性,处理这些属性的方法来自于类当中
3.3 对象的属性引用
使用对象名.属性名来调用对象的属性
3.4 对象之间的交互
对象的本质是一个名称空间可以通过对象来调用对象中的属性   对象之间的交互即组合,一个对象的属性是另外一个对象,通过这个对象可以调用修改另外一个对象的属性
3.5 类名称空间与对象/实例名称空间
类的名称空间相对于对象是公共的,对象可以直接调用,, 但是对象的名称空间在类中不可以直接调用,需要使用对象的绑定方法来将对象自动传入  或这  获取一个对象来通过对象的名称空间名(即对象名)来调用对象
类的名称空间相对于对象来说是公共的 对象可以直接调用,在创建对象是会开辟一个名称空间将对象私有的属性与属性名的绑定关系加到名称空间  然后将类中的函数绑定给对象  对象通过该绑定的值来调用类中的函数属性
三 继承与派生

4.1 什么是继承
继承就是一种新建类的一种方式,通过这种方式可以将另外一个类中的属性在这个类中直接调用,
4.2 继承与抽象(先抽象再继承)
先提取出对象与对象之间的相同点与不同点,在根据总结的结果去定义类,与对象的私有属性
4.3 继承与重用性
继承的重用就是类与类具有某种属性上的相同点,通过继承可以减少类与类之间的代码冗余
4.4 组合与重用性
组合的代码重用性就是类与类之间没有显著的相同点,但是又要使用另外一个类的属性,这时可以通过组合(一个对象的属性是另外一个对象)的方式来进行组合以减少继承的代码之间的复杂度
四
4.6 抽象类
抽象类就是元类是 abc.ADCMeta 的类 抽象类就是一个类的模板 抽象类不可实例化,当子类继承抽象类的时候没有将抽象类中的抽象方法全部实现完,那么这个类也是抽象类,也不可以实例化,
抽象就是强制的将建立类与类之间的多态性,多态性就是子类在派生属性时与属性名与参数都与父类的相同,这样调用者就可以忽略类型而去直接取调用方法
五
4.7 继承实现的原理(继承顺序:深度优先,广度优先)
继承的实现原理就是基于c3算法的,c3算法会计算继承树来获取一个结果  __mor__ 使用该方法查看,
深度优先广度优先是基于新式类与经典类与菱形继承,但是在python3中只有新式类   新式类就是继承了object的类及其子类,经典类就是没有继承object的类及其子类,菱形继承就是一个类的2个及以上的继承链最后都指向同一个类
经典类属性查找是深度优先,即每一条继承链都将查找到最后一个,(不存在重复查找)
新式类的属性查找是广度优先 即最后继承链交汇的类最后被检查
4.8 子类中调用父类方法
使用super()。的方式来调用父类方法,查找的路径严格遵守c3算法,super()是一种简写的方式,在python2中要写出要查找继承链中的位置和当前要查找的对象的对象,即self    super(开始查找的位置,self)

六 多态与多态性
5.1 多态
多态就是一种事物的多种形态,多种表达形式
5.2 多态性
子类在派生父类方法的时候(重写)方法的参数方法名与父类相同,这样在使用类的时候就不用再去考录类型之间的不同,而是直接去考录具体的各个方法的实现,在python中推崇的时鸭子类型,即归一性,在不强制设计者必须在继承的基础上使用多态,而是只要属性名定义的相同,那么我就将这些类看待成同一个类型



七 封装
6.1 要封装什么
封装类或者对象的数据属性与函数属性
6.2 为什么要封装
封装是为了不让调用者直接调用类中的属性,而是通过设计者提供的接口去调用,规范调用者的调用
6.3 封装分为两个层面
函数属性的封装与数据属性的封装,封装的本质原理就是语法层次上的变动,在定义类的阶段即语法检测的时候将类内部所有的__开头的属性全部命重名
八 property,绑定到对象的方法,绑定到类的方法,解除绑定的方法
property
就是将函数属性伪装成一个数据数据属性,可以通过gettr  deleter来进一步的伪装
方法绑定给谁就应该给谁来调用,绑定给对象用的方法会自动的将对象当作第一个参数传入,就是对象来调用的时候附加了自动传值的效果  但是类来调用对象绑定方法的时候不会自动传值,
在类中声明的方法都默认为对象绑定方法,  使用classmethod来声明类绑定方法  同上会将类本身自动传值,对象也可以调用  但是自动传值是产生该对象的类
九 反射
反射就是使用字符串来操作类或对象中的属性,
反射的方法包括对属性的增删查改,  setattr ,delattr , hasattr,getattr

十 isinstance,issubclass,__str__,__slots__
instance是查看该类是否是另外一个类的对象,是返回true 不是  返回false
issubclass 查看该类是否另外一个类的子类,是返回true  不是  返回false
__str__ 在print()该类的时候会自动调用将__str__中的返回值(str类型)打印出来,该返回值应该包括对类的简单描述
solts是用来限制对类的属性添加操作使对象只能添加slots中的名字的变量名  否则抛出AttributeError属性绑定错误
1十一 __del__
在执行del 对象时的时候自动执行的操作或者垃圾回收器回收资源时也会调用该方法  可以在del中添加回收资源时的额外操作

十二 __call__,元类

__call__ 当类实例化的时候会自动触发父类或者元类中的__call__方法的执行,  call方法会使用__new__方法来获取一个空对象然后在调用类的init方法来对对象进行初始化添加对象独有的属性,然后返回这个建立好的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值