文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python 面向对象之继承实例讲解

2023-01-30 21:59

关注

面向对象编程语言具有封装、继承、多态三个基本特征,本文就继承举例详谈


比如说学校

主要有3大角色:

学校,讲师,学员


学校可以注册学员,统计有多少学员

老师负责讲课

学生听课,提问,学习,交学费


先定义4个类:

class School(object): #学校
    def __init__(self):
        pass
        
class SchoolMember(object): #学校成员
    def __init__(self):
        pass
        
class Teacher(SchoolMember): #讲师
    def __init__(self):
        pass
        
class Student(SchoolMember): #学生
    def __init__(self):
        pass

再写几个类方法

class School(object): #学校
    def __init__(self):
        pass

    def enroll(self): #注册
        pass

class SchoolMember(object): #学校成员
    def __init__(self):
        pass

    def tell(self): #打印自己个人信息
        pass

class Teacher(SchoolMember): #讲师
    def __init__(self):
        pass

    def tell(self): #重构父类方法,打印自己个人信息
        pass

    def teach(self): #讲课
        pass

class Student(SchoolMember): #学生
    def __init__(self):
        pass

    def tell(self):
       pass

    def pay_tuition(self,amount): #交学费
        pass

完善类方法

class School(object): #学校
    def __init__(self,name,addr):
        self.name = name #姓名
        self.addr = addr #地址
        self.students = [] #学生列表
        self.teachers = [] #讲师列表

    def enroll(self,stu_obj): #注册
        print('为学员%s 办理注册手续'% stu_obj)
        self.students.append(stu_obj)

class SchoolMember(object): #学校成员
    def __init__(self,name,age,sex):
        self.name = name #姓名
        self.age = age #年龄
        self.sex = sex #性别

    def tell(self): #打印自己个人信息
        pass

class Teacher(SchoolMember): #讲师
    def __init__(self,name,age,sex,salary,course):
        super(Teacher,self).__init__(name,age,sex) #引用父类的name,age,sex
        self.salary = salary #工资
        self.course = course #课程

    def tell(self): #重构父类方法,打印自己个人信息
        print('''
        --- info of Teacher:%s ---
        Name:%s
        Age:%s
        Sex:%s
        Salary:%s
        Course:%s
        ''' % (self.name,self.name,self.age,self.sex,self.salary,self.course))

    def teach(self): #讲课
        print("%s is teaching course [%s]" % (self.name,self.course))

class Student(SchoolMember): #学生
    def __init__(self,name,age,sex,stu_id,grade):
        super(Student,self).__init__(name,age,sex) #引用父类的name,age,sex
        self.stu_id = stu_id #学生id
        self.grade = grade #班级

    def tell(self):
        print('''
        --- info of Student:%s ---
        Name:%s
        Age:%s
        Sex:%s
        Stu_id:%s
        Grade:%s
        ''' % (self.name,self.name,self.age,self.sex,self.stu_id,self.grade))

    def pay_tuition(self,amount): #交学费
        print("%s has paid tution for $%s" % (self.name,amount))

实例化对象

school = School("老男孩IT","沙河") #实例化学校

t1 = Teacher("Oldboy",56,"M",2000000,"Linux") #实例化一个老师
t2 = Teacher("Alex",22,"M",3000,"PythonDevOps")

s1 = Student("ChenRonghua",36,"M",1001,"PythonDevOps") #实例化一个学生
s2 = Student("Xuliangwei",19,"M",1002,"Linux")

执行类方法

t1.tell() #打印老师个人信息
s1.tell() #打印学生个人信息

执行输出:

        --- info of Teacher:Oldboy ---

        Name:Oldboy

        Age:56

        Sex:M

        Salary:2000000

        Course:Linux

        


        --- info of Student:ChenRonghua ---

        Name:ChenRonghua

        Age:36

        Sex:M

        Stu_id:1001

        Grade:PythonDevOps



雇佣一个老师,注册一个学生,完整代码如下:

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

class School(object): #学校
    def __init__(self,name,addr):
        self.name = name #姓名
        self.addr = addr #地址
        self.students = [] #学生列表
        self.stalls = [] #员工列表

    def enroll(self,stu_obj): #注册
        print('为学员%s 办理注册手续'% stu_obj.name)
        self.students.append(stu_obj)

    def hire(self,stall_obj): #雇用老师
        self.stalls.append(stall_obj) #添加员工
        print('雇佣新员工 %s' % stall_obj.name)

class SchoolMember(object): #学校成员
    def __init__(self,name,age,sex):
        self.name = name #姓名
        self.age = age #年龄
        self.sex = sex #性别

    def tell(self): #打印自己个人信息
        pass

class Teacher(SchoolMember): #讲师
    def __init__(self,name,age,sex,salary,course):
        super(Teacher,self).__init__(name,age,sex) #引用父类的name,age,sex
        self.salary = salary #工资
        self.course = course #课程

    def tell(self): #重构父类方法,打印自己个人信息
        print('''
        --- info of Teacher:%s ---
        Name:%s
        Age:%s
        Sex:%s
        Salary:%s
        Course:%s
        ''' % (self.name,self.name,self.age,self.sex,self.salary,self.course))

    def teach(self): #讲课
        print("%s is teaching course [%s]" % (self.name,self.course))

class Student(SchoolMember): #学生
    def __init__(self,name,age,sex,stu_id,grade):
        super(Student,self).__init__(name,age,sex) #引用父类的name,age,sex
        self.stu_id = stu_id #学生id
        self.grade = grade #班级

    def tell(self):
        print('''
        --- info of Student:%s ---
        Name:%s
        Age:%s
        Sex:%s
        Stu_id:%s
        Grade:%s
        ''' % (self.name,self.name,self.age,self.sex,self.stu_id,self.grade))

    def pay_tuition(self,amount): #交学费
        print("%s has paid tution for $%s" % (self.name,amount))

school = School("老男孩IT","沙河") #实例化学校

t1 = Teacher("Oldboy",56,"M",2000000,"Linux") #实例化一个老师
t2 = Teacher("Alex",22,"M",3000,"PythonDevOps")

s1 = Student("ChenRonghua",36,"M",1001,"PythonDevOps") #实例化一个学生
s2 = Student("Xuliangwei",19,"M",1002,"Linux")

t1.tell() #打印老师个人信息
s1.tell() #打印学生个人信息

school.hire(t1) #雇佣一个老师
school.enroll(s1) #注册一个学生

执行输出:


        --- info of Teacher:Oldboy ---

        Name:Oldboy

        Age:56

        Sex:M

        Salary:2000000

        Course:Linux

        


        --- info of Student:ChenRonghua ---

        Name:ChenRonghua

        Age:36

        Sex:M

        Stu_id:1001

        Grade:PythonDevOps

        

雇佣新员工 Oldboy

为学员ChenRonghua 办理注册手续


打印2个列表

print(school.students) #学生列表
print(school.stalls) #员工列表

执行输出:

[<__main__.Student object at 0x000001C7018BD390>]

[<__main__.Teacher object at 0x000001C7018BD320>]

这是2个对象


再注册一个学生,让第一个老师去讲课,最后一行添加

school.enroll(s2) #注册第二个学生
school.stalls[0].teach() #让第一个老师去讲课

执行输出:

Oldboy is teaching course [Linux]


让每个学生都交学费,最后一行添加

for stu in school.students:
    stu.pay_tuition(5000)

执行输出:

ChenRonghua has paid tution for $5000

Xuliangwei has paid tution for $5000



在这个例子中,SchoolMember和Teacher、Student是继承关系

Teacher、Student和School是组合关系,通过某种方式,组合在一起了。

他们之间产生了一些交互

这个例子不难,只要把逻辑理清就可以了。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯