python-类与类继承

作者: 古代怪兽哥莫拉超进化 | 来源:发表于2024-11-25 23:54 被阅读0次

前言

刚刚接触编程的时候,我们往往按照时间顺序思考某一个问题该如何解决,采取不同的方法(函数)依次实现目标,也就是所谓的“面向过程编程”
与之不同的是,实际生活中存在大量数据本身和某一种属性或方法紧密结合的情况,比如学生的学费与学制、学校水平挂钩;工人的工资和工种、工作年限挂钩,这时为了方便管理我们可以采用一个对象(工人群体、学生群体)对应不同的属性(工种、学制)对应不同的方法(学费、工资如何计算)的方式管理数据,也就是“面向对象编程”

面向过程:以过程(或函数)为中心,强调任务的完成,通过对数据和功能的分离来解决问题。代码组织通常围绕函数和过程流。
面向对象:以对象为中心,强调通过封装数据和行为(方法)来模拟现实世界。对象是类的实例,类定义了对象的属性和方法。

实例

本例来源于B站up主:林粒粒呀

假设你管理着一家公司的工人数据库,其中有许多工人(对象),他们有姓名和工号两种属性,你希望有这样一个函数,每次调用都可以输出他们的姓名和工号;此外,工人分为全职工人和兼职工人,你希望还有一个函数,每次调用可以输出工人的月薪:全职工人按月发薪,兼职工人按日发薪,最终都以月薪的形式展现

我们可以使用class关键字定义一个Worker类:
该类下面的每一个对象具有姓名和工号两个自身属性

name和work_id是我们调用Worker类时从外部传入的变量,要注意给到self.name和self.work_id下使之成为类下属对象的自身属性, __init__函数是构造函数,必须要有self参数
print_info方法可以查看工人的姓名和工号

class Worker:
    def __init__(self, name, work_id):  # 名字好像只能是字符串
        self.name = name
        self.work_id = work_id

    def print_info(self):
        print(f"姓名:{self.name} 工号:{self.work_id}")

再进一步,分全职工人和兼职工人,他们对应着不同的薪资计算方法
FT是Full-time的简写, PT是Part-time的简写
这里可以用到类继承,无论是全职还是兼职工人,都是工人(父类)的子类,所以工号和姓名这两个属性以及打印工号和姓名的函数(print_info)可以直接从Worker类下面继承,只需要在各自类名后的括号里放入父类名Worker,并调用super()初始化继承自父类的两个属性就可以了。

我们希望得到全职工人和兼职工人各自的月薪计算方法

由于全职工人本来就按月发薪,所以直接把monthly_salary传给FTWorker类,再定义一个函数calculate_monthly_pay_FT返回monthly_salary就可以了,最后定义一下print_info_FT函数,格式化输出姓名、工号和月收入

class FTWorker(Worker):
    def __init__(self, name, work_id, monthly_salary):
        super().__init__(name, work_id)
        self.monthly_salary = monthly_salary

    def calculate_monthly_pay_FT(self):
        return self.monthly_salary  # 如果不返回任何值就会出现None

    def print_info_FT(self):
        print(f"{self.name}(工号{self.work_id})的月收入是{self.monthly_salary}")

兼职工人按日发薪,所以想知道月薪需要加上工作时长work_time参数,再把两者相乘的结果传给PT_salary变量并返回,类似的,我们也定义一个print_info_PT函数格式化输出姓名、工号和月收入即可,至此两个子类都已经封装好了

class PTWorker(Worker):
    def __init__(self, name, work_id, daily_salary, work_time):
        super().__init__(name, work_id)
        self.daily_salary = daily_salary
        self.work_time = work_time

    def calculate_monthly_pay_PT(self):
        PT_salary = self.work_time * self.daily_salary
        return PT_salary

    def print_info_PT(self):
        print(f"{self.name}(工号{self.work_id})的月收入是{self.work_time * self.daily_salary}")

向类中添加对象

参数不要传漏了,兼职工人有一个工时

lin = PTWorker("lzy", 34, 500, 8)
zeng = FTWorker("zcy", 1, 8000)
lyf = PTWorker("lyf", 9, 100, 14)

最后调用类下的方法,看看结果

lin.print_info()
lin.print_info_PT()
zeng.print_info()
zeng.print_info_FT()
lyf.print_info()
lyf.print_info_PT()

结果

image.png

相关文章

  • OC之02面向对象03之三大特性02继承、多态

    继承 基本使用: 继承用于类与类之间例如:类A 类B 如果说类B继承类A那么,类B就会继承了类A的所有的属性而且...

  • JAVA(9)继承与多态

    继承与多态 、抽象类、接口 继承: 继承是类与类的一种关系 java中的继承是单继承 继承的好处: 子类拥有父类的...

  • 继承

    继承:类与类之间的一种关系,子类可以继承父类的成员 关键字extends:继承关键字,使类与类之间产生继承关系 格...

  • js面向对象总结

    1、类与实例 类的声明 实例化 2、类与继承 继承的几种方式

  • 03.接口和类之间的各种关系

    接口和类的关系 A:类与类之间:继承关系,一个类只能直接继承一个父类,但是支持多重继承 B:类与接口之间:只有实现...

  • 2021-01-19java继承

    1,什么是继承 继承是类与类之间的一种关系,继承的类叫子类,被继承的类叫父类;子类继承父类后,将拥有父类的属性和方...

  • 类关系

    六种关系继承与实现关系:类B继承类A或者接口A,就称为继承与实现关系。依赖关系:类B独立模型,类A中方法用到类B,...

  • 继承与派生

    1,父类与子类,单继承与多继承 2、为何要用继承:用来解决类与类之间代码冗余问题 3,如何实现继承 4,属性查找 ...

  • 2020-12-14 《大话设计模式》之 UML & 工厂模式

    UML 类与类, 类与接口之间本质都是继承关系 继承用实线(◁—)空心三角指向被继承的类/被实现的接口 实现用虚线...

  • 类与继承

    当声明父类而用子类实例化时: public class Main { public static int ...

网友评论

    本文标题:python-类与类继承

    本文链接:https://www.haomeiwen.com/subject/helfsjtx.html