面向对象的继承

子类能继承父类的属性和方法,若子类没有,则去父类中调用

 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方法后,以后父类若变更类名,依旧可以正常使用

 

原文地址:https://www.cnblogs.com/wen-kang/p/9236891.html