1、复习:

子类的对象要去调用方法或者属性:自己有的调自己的,自己没有的调父类的

self是什么:谁调用就是谁

子类的对象调用父类的方法,在父类方法中的self是子类的对象

class Foo:

def get_test(self):

self.test()

def test(self):

pass

class Son(Foo):

def test(self):

pass

f = Son()

f.get_test()

super:如果自己有还要用子类对象调父类的

# super(子类名,子类对象).父类方法名

class Foo:

def get_test(self):

self.test()

def test(self):

pass

class Son(Foo):

def test(self):

super().test() #调用父类的test

super(Son,self).test() #调用父类的test

s = Son()

f = Foo()

f.test(s)

# s = Son()

# s.test()

# 在类外

# super(Son,s).test()

# 在类内

# super(Son,self).test()

# super().test()

一 抽象类和接口类

1 什么是抽象类:可以实现具体的某个功能,并且不支持多继承的这个父类就叫做抽象类。

2 什么是接口类:不实现具体的方法的并且推荐多继承的这个父类就叫做接口类。

抽象类和接口类都是为了定义子类的规范。

3 什么叫做归一化设计:创建一个函数来调用类里面的属性或方法,不需要(对象.方法())来调用,这种设计思想就叫做归一化设计。前提条件是几个类都实现相同的方法。

4 abc模块:用于接口类和抽象类中一个模块。ABC是Abstract Base Class的缩写。

abc.ABCMeta:由于生成抽象类和接口类的抽象方法和抽象属性,由他生成的类可以直接被继承。

abc.abstractmethod:给父类的方法加上一个装饰器。

接口类:

importabcclass Payment(metaclass=abc.ABCMeta):

@abc.abstractmethoddef payment(self哦,monry):pass

classWei(Payment):defpayment(self,monry):print('微信支付%s元'%monry)classZhi(Payment):deffuqian(self,monry):print('支付宝支付%s元'%monry)defpayment(suixiang,monry):

suixiang.payment(monry)

d1=Wei()

payment(d1,100)

d2=Zhi() #报错

payment(d2,200) #报错

如果在子类中没有和接口类相同的方法,只要创建该子类对象就会报错。

抽象类:

importabcclass Payment(metaclass=abc.ABCMeta):

@abc.abstractmethoddefpayment(self,money):print('支付了%s元'%(money))classWei(Payment):defpayment(self,monry):

super().payment(monry)classZhi(Payment):defpay_ment(self,money):pass

defpayment(self,money):

self.payment(money)

w1=Wei()

payment(w1,100)

z1=Zhi()

payment(z1,200)

5 多继承一般情况下不用,但是可以在接口类的情况下使用

from abc importABCMeta,abstractmethodclass Fly_animal(metaclass=ABCMeta):

@abstractmethoddef fly(self):pass

class Walk_animal(metaclass=ABCMeta):

@abstractmethoddef walk(self):pass

class Swim_animal(metaclass=ABCMeta):

@abstractmethoddef swim(self):pass

classTiger(Walk_animal,Swim_animal):def walk(self):print('%s is walking'%self)def swim(self):print('%s is swiming'%self)classFrog(Walk_animal,Swim_animal):def walk(self):print('%s is walking'%self)def swim(self):print('%s is swiming'%self)classSwan(Fly_animal,Walk_animal,Swim_animal):def walk(self):print('%s is walking'%self)def swim(self):print('%s is swiming'%self)def fly(self):print('%s is flying'%self)

t1=Tiger()

t1.walk()

f1=Frog()

f1.swim()

s1=Swan()

s1.fly()

6 依赖倒置原则:高层的模块应该不依赖于底层模块;二周都应该依赖于抽象;抽象不应该依赖于细节;细节应该依赖于抽象;换言之:要针对接口编程,而不是针对实现编程。

7 接口隔离原则:使用多个专门的接口,而不是使用单一的总接口,即客户端应该不依赖于那些不需要的接口

二 新式类和经典类

1 python中分为新式类和经典类

在python2 中定义经典类:class  父类名:

在python2中定义新式类:class   父类名(object):

object是所有类的基类。

新式类和经典类在继承的顺序上的不同:在新式类中属于官渡优先;在经典类中属于深度优先。

什么叫深度优先

在经典类中,从左到右每个分支查找到底,在进行下一个分支的查找,如果有共同的父类,在查找的第一个分支,就会查找到这个共同的父类,然后在进行下一个分支的查找,在后面查找是不会在去查找他们共同的父类。

什么叫广度优先:

在新式类中,从左到右每个分支查找完毕到他们的共同父类下的子类后,在去查找下一条分支,直到共同父类下的分组查找完毕过后,最后在查找他们共同的父类。

在心=新式类中,mro()可以查看寻找的顺序,经典类中不能使用

classA:deffunc(self):print('A')classB(A):deffunc(self):print('B')classC(B):deffunc(self):print('C')classD(A):deffunc(self):print('D')classE(D):deffunc(self):print('E')classF(A):deffunc(self):print('F')classG(F):deffunc(self):print('G')classH(C,E,G):deffunc(self):print('H')

h=H()

h.func()print(H.mro())

调用经典类:父类名(子类名,对象).功能或者方法。调用是需要传入两个参数,一个是子类名,一个是对象

调用新式类:父类名().功能或者方法。父类可以不需要传入参数。

在python3 中只有新式类,而没有经典类。

三 多态

什么是多态:一种事物的多种形态叫做多态,这里指的是一个参数的多种形态

python是自带多态的

什么是多态性:在python中一个参数可以使用多种数据类型,就叫做多态性

鸭子类型:在各种数据类型之间他们没有任何的联系,但是他们拥有着一些共同的属性或者功能,这就叫做鸭子类型。

python画大象_Python Day25相关推荐

  1. python画大象_Python Day21

    异常处理 1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 deftest:p ...

  2. python画大象_Python Day20

    一.什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码( ...

  3. python画大象_Python Day18

    列举一些常用的内置函数: 1.chr()和ord() 1chr()将数字转换为对应的ascii码表字母2 >>> r=chr(65)3 >>> print(r)4 ...

  4. python画大象_Python学习之路(01)-- Python基础

    一. 初识Python-HelloWorld 1 #!/usr/bin/env python 2 #当py文件为可执行程序时,需添加该项 3 4 5 #coding: utf-8 6 7 print( ...

  5. python画大象_Python Day4-5

    一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 str = "-"; seq= ("a", & ...

  6. python画大象_Python Day8

    #16. 实现购物车(8分) #            功能要求: #                    要求用户输入自己拥有总资产,例如:2000 #     显示商品列表,让用户根据序号选择商 ...

  7. python画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  8. python 画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  9. python画树干_python教你画一棵树

    最近不少读者对 python 的 turtle 库比较感兴趣, 用python画一朵玫瑰给你 ,之前也写了一篇文章讲过如何画一朵玫瑰花.今天在知乎上找了一个用 turtle 画树的 python 程序 ...

最新文章

  1. 《一条狗的回家路》曝中国风海报 霍思燕为狗狗配音
  2. python 获取html js 变量_Python爬虫与反反爬虫实践
  3. EDAS 4.0 助力企业一站式实现微服务架构转型与 K8s 容器化升级
  4. 31-32 python mysql-connector创建数据、crud,where,排序,删除等。PyMSQL驱动,插入操作、查询操作、更新操作、删除操作、执行
  5. Redis如何做内存优化?
  6. 利用memcache来保存tomcat的session会话
  7. Java基础:Collections
  8. 软件测试 白盒测试是否为闰年,对【判断闰年】函数的白盒测试
  9. 锋利的jQuery系列一
  10. linux局域网传输文件,局域网传输文件详解(转)
  11. 2020-21《全球软件质量报告》解读
  12. 大厂技术博客学习(2)​——5G时代下淘宝直播高清低延时技术jie秘
  13. 黑苹果制作Clover开机引导脱离U盘,小新Pro13详细教程
  14. POI处理Excel,条形图,散点图,折线图
  15. android 截屏需要权限,安卓App要权限还会偷删截屏?专治流氓App神器
  16. windows10配置openvino
  17. 看阿玛尼迪迪的总结后的自感
  18. 计算机组成原理——乘法运算(一位乘)
  19. C# 8.0核心技术指南
  20. 大厂面试题Object object = new Object()

热门文章

  1. 1.1程序设计(C语言基础)
  2. 基于Gitlab Issues为导向的分支管理
  3. tinyalsa工具命令
  4. Android免root投屏远程控制,MK手机远程控制
  5. vue+echarts画甘特图
  6. 摩拜OFO单车哪家强,看他们的网站似乎发现了点什么
  7. EasyClick iOS脚本_免越狱_免硬件_iOS脱机版开放接口使用说明
  8. java ssm基于springboot的通知反馈系统
  9. sqlserver数据库清理(收缩文件)
  10. linux 进程sockfd fork,Linux下多进程服务端客户端模型一(单进程与多进程模型)...