2021-08-26 Python之继承
#继承
#is a ; has a
'''
公路,road
属性:长度,名称
车,car
属性:名字,时速
方法:1.求车名在那条公路上以多少时速行驶
get_time(self,road)
2.初始化车属性信息__init__方法
3.打印对象现实车的属性信息
'''
1 import random 2 class road: 3 def __init__(self,name,len): 4 self.name=name 5 self.len=len 6 7 class car: 8 def __init__(self,brand,speed): 9 self.brand=brand 10 self.speed=speed 11 12 def get_time(self,road): 13 ran_time=random.randint(1,20) 14 msg='{}品牌的车在{}上,行驶速度是{},行驶了{}小时'.format(self.brand,road.name,self.speed,ran_time) 15 print(msg) 16 17 def __str__(self): 18 return '{}品牌的车,速度:{}'.format(self.brand,self.speed) 19 20 21 #创建实例化对象 22 r=road('京师',1200) 23 print(r.name) 24 25 r.name='京哈高速' 26 print(r.name) 27 28 ad=car('奥迪',120) 29 print(ad) 30 ad.get_time(r)
#学生类
#说明 has a
#student book
'''
has a
一个类中使用了另外一种自定义的类型
student 中使用了computer book
类型:
系统类型:
str int list dict tuple set.......
自定义类型:
算是自定义的类,都可以当做一种类型
'''
1 class Computer: 2 def __init__(self,brand,type,colour): 3 self.brand=brand 4 self.type=type 5 self.colour=colour 6 def online(self): 7 print('正在使用电脑上网') 8 def __str__(self): 9 return self.brand+'---'+self.type+'---'+self.colour 10 11 12 class Book: 13 def __init__(self,bname,author,number): 14 self.bname=bname 15 self.author=author 16 self.number=number 17 def __str__(self): 18 return self.bname+'---'+self.author+'---'+str(self.number) 19 20 21 class Student: 22 def __init__(self,name,computer,book): 23 self.name=name 24 self.computer=computer 25 self.book=book 26 self.books=[] 27 self.books.append(book) 28 def borrow_book(self,book): 29 for book1 in self.books: 30 if book1.bname==book.bname: 31 print('已经借过此书') 32 break 33 else: 34 self.books.append(book) 35 print('添加成功') 36 37 38 def show_book(self): 39 for book in self.books: 40 print(book.bname) 41 42 def __str__(self): 43 return self.name+'---'+str(self.computer)+'---'+str(self.books) 44 45 46 #创建对象 47 computer=Computer('mac','mac pro2018','深灰色') 48 book=Book('盗墓笔记','南派三叔',10) 49 print(book) 50 stu=Student('songsong',computer,book) 51 print(stu) 52 53 print('--------------------------------------') 54 55 #看借了哪些书 56 stu.show_book() 57 58 book1=Book('鬼吹灯','天下霸唱',2) 59 60 stu.borrow_book(book1) 61 62 print('---------------------------------------') 63 64 stu.show_book()
#继承关系
#is a base class 父类 基类
'''
Student Employee Doctor 相同代码--->代码冗余--->可读性不高
将相同的代码提取--->继承Person类
特点:
1.如果类中不定义__init__方法,则调用父类super class 中的__init__
2.如果类继承父类也需要定义自己的__init__ ,就需要在当前类的__init__调用一下父类__init__()
3.如何调用父类的__init__()
super().__init__(参数)
4.如果父类有eat() 方法,子类也需要定义自己的eat()方法,默认搜索原则,先找当前类,再找父类。
s.eat()
override:重写(覆盖)
父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法。这种行为:重写
'''
1 class Person: 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 6 def eat(self): 7 print(self.name+'正在吃饭...') 8 9 def run(self): 10 print(self.name+'正在跑步...') 11 12 class Student(Person): 13 def __init__(self,name,age,clazz): 14 super().__init__(name,age) 15 self.clazz=clazz 16 17 #如何调用父类__init__() 18 #super() 父类对象 19 20 def study(self,course): 21 print('{}正在学习{}课程'.format(self.name,course)) 22 23 def eat(self): 24 print(self.name+'正在吃,狮子头') 25 26 27 class Employee(Person): 28 def __init__(self,name,age,salary,manager): 29 super().__init__(name,age) 30 self.salary=salary 31 self.manager=manager 32 33 class Doctor(Person): 34 def __init__(self,name,age,patient): 35 super(Doctor,self).__init__(name,age) 36 self.patient=patient 37 38 39 s=Student('jacty',18,'python1313') 40 s.run() 41 s.study('python基础') 42 s.eat() 43 44 e=Employee('tom',12,100000,'king') 45 e.run() 46 47 lists=['zzz','ssss','rrrr','tyyy'] 48 d=Doctor('ludy',30,lists) 49 d.run()
本文来自博客园,作者:{admin-xiaoli},转载请注明原文链接:{https://www.cnblogs.com/crackerroot}