29.继承丶多态
Python类的继承丶多态
1. python中什么是继承
- 新类不必从头编写
- 新类从现有的类继承,就自动拥有了现有类的所有功能
- 新类只需要编写现有类缺少的新功能
继承的好处:
- 复用已有代码
- 自动拥有了现有类的所有功能
- 只需要编写缺少的新功能
- 业务拓展性更强
继承的特点:
- 子类和父类是is关系,继承可以拥有所有父类中的属性
python继承的特点:
- 总是从某个类继承
- 不要忘记调用super()._init_()
2.python中继承一个类:
语法:列外同时也可以继承多个父类
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Teacher(Person): def __init__(self, name, gender, course): super(Teacher, self).__init__(name, gender) self.course = course t = Teacher('Alice', 'Female', 'English') print(t.name) print(t.gender) print(t.course)语法结果:
Alice Female English
class MIkePart(object): log = 'zhang\'s奶茶店' def __init__(self,*arg): self.attrs = arg def eat(self): if not self.attrs: print('倒闭了') class Son_MikePart(MIkePart): #这里一定要把父类写进()里 pass m1 = MIkePart('珍珠奶茶','香蕉奶茶','原味奶茶','草莓奶茶') m2 = Son_MikePart('哈密瓜奶茶','柠檬奶茶') print(m2.attrs) m2.eat() print(Son_MikePart.__bases__)运行结果:
('哈密瓜奶茶','柠檬奶茶') (<class '__main__.MIkePart'>,)
- class.__bases__
可以查询出当前类的父类
super(class,self).__init__()找到当前super函数第一个参数的父类,用它的init函数先初始化数据,然后再自己添加自己的数据
1,
class MIkePart(object): log = 'zhang\'s奶茶店' def __init__(self,*arg): self.attrs = arg self.name = '小张' self.sex = 'woman' def eat(self): if not self.attrs: print('倒闭了') class Son_MikePart(MIkePart): #子类(父类) def __init__(self,*arg):#赋值函数 super(Son_MikePart,self).__init__(*arg) #找到指定的父类 self.phone = 'iphone6' def eat(self): #继承eat函数可以进行修改重写 if self.attrs: print('可以边吃边健身') else: print('败光了,已经倒闭了') def drink(self): #不光可以继承原来的功能还能编写缺少的功能让其变得更强大 self.attrs = '喝光了,剩下固体了,还可以卖点破烂钱从头再来' print(self.attrs) m1 = MIkePart('珍珠奶茶','香蕉奶茶','原味奶茶','草莓奶茶','哈密瓜奶茶','柠檬奶茶') print(m1.attrs,m1.name,m1.sex) m2 = Son_MikePart('哈密瓜奶茶','柠檬奶茶') print(m2.attrs,m2.name,m2.sex,m2.phone) m2.eat() m2.drink() print(Son_MikePart.__bases__)运行结果:
('珍珠奶茶', '香蕉奶茶', '原味奶茶', '草莓奶茶', '哈密瓜奶茶', '柠檬奶茶') 小张 woman ('哈密瓜奶茶', '柠檬奶茶') 小张 woman iphone6 可以边吃边健身 喝光了,剩下固体了,还可以卖点破烂钱从头再来 (<class '__main__.MIkePart'>,)2,
class A(object): def __init__(self,type): self.cpu = '联发科' self.mem = 16 self.system = 'ios' self.size = 32 self.type = type def play_game(self): self.mem -=3 print('当前剩余内存是:%s' % self.mem) def call(self): print('正在打电话,用的是%s' % self.type) def show(self): print('当前手机是屏幕大小为:%s' % self.size) a=A('ios') a.call() a.play_game() a.show() class B(A): def __init__(self,type): super(B,self).__init__(type) self.mem -=3 self.size = 35 b = B('安卓') b.call() b.play_game() b.show()运行结果:
正在打电话,用的是ios 当前剩余内存是:13 当前手机是屏幕大小为:32 正在打电话,用的是安卓 当前剩余内存是:10 当前手机是屏幕大小为:35
3. python中判断类型
函数isinstance()可以判断一个变量的类型,既可以用在Python内置的数据类型如str、list、dict,也可以用在我们自定义的类,它们本质上都是数据类型。
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender class Student(Person): def __init__(self, name, gender, score): super(Student, self).__init__(name, gender) self.score = score class Teacher(Person): def __init__(self, name, gender, course): super(Teacher, self).__init__(name, gender) self.course = course t = Teacher('Alice', 'Female', 'English') print(isinstance(t, Person)) #判断当前实例是否属于这个类的 print(isinstance(t, Student)) print(isinstance(t, Teacher)) print(isinstance(t, object))运行结果:
True False True Tru
4.python中多态
-
什么是多态
- 同一件事,不同情况,不同处理,就是多态
-
来自继承
- 怎么实现继承:
- 父类被子类继承
-
子类重写父类已有同名函数
-
子类调用这个同名函数
class A(object): def func(self): print('我的A的函数') class B(A): def func(self): print('我修改的是A类函数,但是我是B类') a = A() b = B() def work(A): #只接受A的实例 A.func() work(a) work(b)运行结果:
我的A的函数 我修改的是A类函数,但是我是B类
作者:走路带风的帅界扛把子
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。