我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合图库 > 多态逻辑 >

day23--面向对象之封装、继承、多态

归档日期:04-25       文本归类:多态逻辑      文章编辑:爱尚语录

  在类的内部(class内部)可以由属性和方法,外部代码可以通过直接调用实例变量的方法来操作数据,这样就隐藏了内部的逻辑,但是外部还是可以直接修改实例的属性,因此当需求中存在需要内部属性不被外部访问,就可以把属性的名称前加__。

  在Python中,实例的变量如果是以__开头的,就变成一个私有化属性,只有内部可以访问,外部不能访问。

  什么是封装: 装;网容器即名称空间里面存入名字 封; 代表将存放与名称空间中的名字给藏起来,这种隐藏对外不对内 为什么要封装: 封数据属性:将数据属性隐藏起来,类外部无法直接操作属性,需要类内开辟一个接口来外部使用可以间接的操作属性,可以在接口内定义任意的控制逻辑,从而严格控制使用者对属性的操作 封函数属性:隔离复杂度(开机只有一个按键实际上却又很多操作) 如何封装: 在类定义的属性前加__开头,(没有__结尾) 底层原理: # __开头的属性实现隐藏,只是语法层面上的变形,并不会真的限制类外部的访问 # 该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增的__开头的属性并不会变形 # 如果父类不想让子类覆盖自己的属性,可以在属性前加__开头

  # property 装饰器,是用来将类的函数属性伪装成数据属性,被装饰过后的函数属性,是不可以进行增删改查操作的,

  # 但是如果实际真的需要增删改查,则需要在所开接口上方进行装饰器(函数名.setter)操作

  1.新式类: 但凡继承object的类,以及该类的子类,都称为新式类(python3中,所有继承关系,父类都默认继承object,因此都是新式类)

  2.经典类:经典类的概念只有在python2中存在,python2中类的继承,父类不默认继承object,如果是新式类,需要手动继承object。

  3.在新式类中属性的查找顺序(按照广度优先原则,最后查找object),在经典类中按照深度优先的原则。

  外界通过Sub对象来调用test方法,一定找自己的test方法(属性的查找顺序)

  -- super().父类普通方法 super().__init__() super()能调用父类所有可继承方法

  继承 1.父类:在类后()中写父类们 class A:pass class B:pass class C(A, B):pass 2.属性查找顺序:自己 - ()左侧的父类 - 依次往右类推 3.抽离:先定义子类,由子类的共性抽离出父类 - 派生:父类已经创建,通过父类再去派生子类 4.继承关系 -- 1)父类的所有非封装的属性和方法均能被继承 -- 2)父类的所有封装的属性和方法均能被继承 -- 3)在子类中要去使用父类的方法 -- 子类继承父类方法:子类不需要去实现父类的方法,子类对象可以直接调用父类方法 -- 重写父类的方法:方法名与父类相同,实现体与父类不同,子类对象调用的是自身方法 -- 重用父类的方法:方法名与父类相同,实现体中有自己的逻辑也调用了父类的方法(super()) -- super():在子类中获取可以调用父类方法的对象,且在父类中体现的调用者子类或子类对象 5.复杂继承:一个类可以继承多个类,查找顺序是根据继承父类从左往右的顺序,并且在查找第一个父类时,将父类的父类也进行查找(一个父类分支全部查找完毕才去查找下一个父类分支) 6.棱形继承 -- 经典类:py2中类不默认继承object,所以没有明确继承的类就没有继承任何类,这样的类称之为经典类 -- 新式类:所有直接或间接继承object的类,py2中主动继承object的类及py3中所有的类 -- 前提:父类中有共有属性或方法,子类没有自己去定义这些属性和方法,必须从父类中获取,到底从哪个父类中获取 -- 经典类:深度查找 a - b - d - c -- 新式类:广度优先 a - b - c - d d b c a

  super().属性 方法与 类名.属性 方法 调用父类属性在继承上的区别

  在子类派生出啦的新方法中重用父类功能2:super()必须在类中用 super(自己的类名,自己的对象) 必须在类中用 在python3中, super() 调用该函数会得到一个返回值,是一个特殊的对象,该对象专门用来访问父类的属性!!!完全按照mro列表 总结:严格依赖继承的mro表 访问是绑定方式,有自动传值的效果

  需求:需要一个对象,该对象有name属性及speak方法,就可以作为一种状态的体现被传入

  2.这些类实例化出的对象,都称之为鸭子,都可以作为需求对象的一种具体体现

  能有自己特有的属性和方法,可以和B完全不一样,但是必须有鸭子类型规定的属性和方法,不然就不是鸭子类型

  能有自己特有的属性和方法,可以和A完全不一样,但是必须有鸭子类型规定的属性和方法,不然就不是鸭子类型

本文链接:http://lcvam.com/duotailuoji/202.html