面向对象的继承
子类能继承父类的属性和方法,若子类没有,则去父类中调用
1 class People:
2 def __init__(self,name,age,general):
3 self.name=name
4 self.age=age
5 self.general=general
6
7 def zhuanqian(self,money):
8 print('努力工作赚钱%s'%money)
9 class Student(People):
10 '学生类继承于人类'
11 pass
12
13 # print(People.__dict__)
14 # print(Student.__dict__)
15 s1=Student('xiaolong',21,'man')
16 print(s1.general)
17 s1.zhuanqian(999)
通常更常用一些的方法是接口继承,它在父类中定义好子类继承必须具备的函数,但不会提供函数的具体实现,由子类继承后来具体实现,Python可以有多个父类继承,但Java或者C#只能有一个。
1 import abc
2 class About(metaclass=abc.ABCMeta):
3 @abc.abstractmethod
4 def read(self):
5 pass
6
7 @abc.abstractmethod
8 def write(self):
9 pass
10
11 class Disk(About):
12 def read(self):
13 print('disk read')
14 def write(self):
15 print('disk write')
16
17 class Cd(About):
18 def read(self):
19 print('cd read')
20 def write(self):
21 print('cd write')
22
23
24 d1=Disk()
25 d1.read()
26 d1.write()
对父类的字段属性进行调用,同时衍生出子类特有的字段属性,可以直接在子类初始化字段属性时,直接父类调用初始化属性(子类self的init方法一定得包含父类的属性)
1 class Vehicle:
2 '这是一个交通工具类'
3 def __init__(self,name,speed,price,many):
4 self.name=name
5 self.speed=speed
6 self.price=price
7 self.many=many
8
9 def run(self):
10 print('****************%s准备发车了,速度是%s' % (self.name, self.speed))
11
12 class Bus(Vehicle):
13 '这是一个公汽 子类'
14 def __init__(self,name,speed,price,many,num,addres):
15 # Vehicle.__init__(self,name,speed,price,many)
super().__init__(name,speed,price,many)
16 self.num=num
17 self.addres=addres
18
19 def run(self):
20 print('%s第%s线启动了,请%s的旅客做好准备!'%(self.name,self.num,self.addres))
21 # Vehicle.run(self)
22 super().run() 换成super后可自动匹配父类 并且无需再传入self 灵活度高
23
24 b1=Bus('复兴号','200km/h',125,2000,'007号','南京')
25 b1.run()
子类在调用函数的时候优先调用自己的方法,然后再调用父类的函数方法
用super方法后,以后父类若变更类名,依旧可以正常使用