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()

 

posted @ 2021-08-26 13:58  admin-xiaoli  阅读(35)  评论(0编辑  收藏  举报