笔试–python 部分 面向对象 继承 单继承多继承 1 2 3 4 5 6 7 8 9 10 11 class ParentClass1 : pass class ParentClass2 : pass class SubClass1 (ParentClass1 ): pass class SubClass2 (ParentClass1,ParentClass2 ): pass
查看所有继承的父类 __base __只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
派生:相对论 在父类的基础上产生子类,产生的子类就叫做派生类 父类里没有的方法,在子类中有了,这样的方法就叫做派生方法。 父类里有,子类也有的方法,就叫做方法的重写
接口类与抽象类 1.接口类:(在抽象类的基础上) 在python中,默认是没有接口类的,接口类不能被实例化(如果实例化会报错),接口类中的方法不能被实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from abc import ABCMeta,abstractmethodclass Payment (metaclass=ABCMeta ): @abstractmethod def pay (self,money ): pass class Wechatpay (Payment ): def fuqian (self,money ): '''实现了pay的功能,但是方法名字不一样''' print ('微信支付了%s元' %money) class Alipay : def pay (self,money ): print ('支付宝 支付了%s' %money) a = Alipay() a.pay(200 ) p = Payment()
封装 封装数据:目的是保护隐私
功能封装:目的是隔离复杂度
如果用了私有的,在类的外部,无法直接使用变形的属性,但是在类的内部可以直接使用
property 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 class Calculate : def __init__ (self,*args ): print (args) if len (args)==1 and (type (args[0 ]) is list or type (args[0 ]) is tuple ): self.Calculatebers=args[0 ] else : self.Calculatebers = args @property def sum (self ): return sum (self.Calculatebers) @property def avg (self ): return self.sum /len (self.Calculatebers) @property def min (self ): return min (self.Calculatebers) @property def max (self ): return max (self.Calculatebers) Calculate = Calculate([3 ,1 ,3 ]) vvv = Calculate(8 ,2 ,3 ) print (Calculate.sum )print (Calculate.min )print (Calculate.avg)print (Calculate.max )print ('-----------' )print (vvv.sum )print (vvv.min )print (vvv.avg)print (vvv.max )property (3 )
生成器,迭代器 可迭代协议: 可以被迭代要满足要求的就叫做可迭代协议。内部实现了__iter__方法
iterable: 可迭代的——对应的标志
什么叫迭代?: 一个一个取值,就像for循环一样取值 字符串,列表,元组,集合,字典都是可迭代的
迭代器协议:内部实现了__iter__,__next__方法 迭代器大部分都是在python的内部去使用的,我们直接拿来用就行了
迭代器的优点:如果用了迭代器,节约内存,方便操作
相同点:都可以用for循环
不同点:就是迭代器内部多实现了一个__next__方法
生成器表达式:类似于列表推倒式,就是把列表推导式的【】改为了() 1 2 3 4 l=[{'name' :'v1' ,'age' :'22' },{'name' :'v2' }] name_list=(dic['name' ] for dic in l) print (name_list)print (next (name_list))
列表推导式: 1 l=[i*y for i in range (100 )]
装饰器 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展
装饰器的本质:就是一个闭包函数
多个装饰器,由上往下执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import time def wrapper (func ): def inner (): start=time.time() func() end=time.time() print (end-start) return inner @wrapper def test_1 (): time.sleep(1 ) print ('aaaaa' ) t1=wrapper(test_1) t1()
网络编程 互斥锁,进程间通信 进程池以及回调函数 线程相关