面向对象

面向对象

修改类和对象的方法。

_init_

对象的绑定方法,对象初始化方法,对象来调用会把对象传过来。

属性查找:包括数据属性,包括方法。

​ - 数据属性:对象中找——》类中——》父类(按照mro查找)——》obj

​ - 方法查找:对象的绑定方法——》父类中按照mro列表查找——》obj

绑定方法:

  • 定义在类内部,没有被任何装饰器装饰的函数,就是方法
  • 给对象来用吗,对象.方法()默认把对象自身传过去 ****特殊之处
  • 类来调用就是普通函数,有几个值传几个值

对象之间的交互

  • 把一个对象传到另一个对象中,操作这个对象
  • 人狗大战

三大特性:继承,封装,多态

  • 在类名后的括号中写要继承的类,用逗号分隔
  • py中支持多继承(属性查找顺序)
  • 新式类和经典类
    • 继承了object的类叫新式类,py3中都是新式类。
      • 没有继承object的类叫经典类。
  • 菱形问题的查找
    • 广度优先,新式类
    • 深度优先,经典类
  • mro列表
  • super() 特殊对象,调用父类的方法和属性(严格按照mro列表查找)
  • self和super的区别:self一定是从根上找,super()从当前位置按照mro列表找
  • 类名,方法(),就是个普通函数,这个就不按照mro列表找了,指名道姓的来用。
  • 派生:子类多出来的属性,方法。

多态和多态性

  • 多态:一个事物多种形态
  • 多态性:执行同一个事物的同一个方法,表现出来的结果是不一样的
  • 两种限制子类必须实现什么方法的方式
    • abc模块
    • raise抛异常
  • 鸭子类型:走路像鸭子,就是鸭子,这是面向对象的多态,是多态性的提现。
  • len() 调用对象._len_()

封装

  • 把属性和方法隐藏
    • 以__开头,就会隐藏
    • 并没有实际隐藏(做了变形)。外部调用,_类__属性。内部调用,定义方法。
    • 隐藏属性,保证数据安全
    • 隐藏方法,隔离复杂度
    • property 装饰器 包装成数据属性

其他两个装饰器

  • classmethon : 类的绑定方法,可以类来调用(对象也可以调用)
  • staticmethon : 静态方法,谁都可以调用,不会自动传参数

元类

  • _call_
  • _new_
  • _getattr_
  • _setattr_
  • _delattr_

反射

通过字符串去获取,删除,修改,对象的属性或方法

  • hasattr
  • getattr
  • setattr
  • delattr

isinstance和issubclass

posted on 2019-09-12 21:17  十七zz  阅读(140)  评论(0编辑  收藏  举报