【Python】继承与多态

news/2024/7/7 21:05:01



知识目录

  • 一、写在前面✨
  • 二、继承
  • 三、多态
  • 四、Account和FreeChecking类的实现
  • 五、总结撒花😊

一、写在前面✨

大家好!我是初心,希望我们一路走来能坚守初心!

今天跟大家分享的文章是 Python中的继承与多态 ,希望能帮助到大家!本篇文章收录于 初心 的 Python从入门到精通 专栏。

🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,和大家共同努力
💕欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘

💕 山重水复疑无路,柳暗花明又一村。 —— 陆游「游山西村」

二、继承

继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。 继承是类与类之间的关系。

继承可以减少代码冗余、提高重用性。

语法:

Class 派生类名(基类名):

例如创建student类,继承people类的代码。

class student(people):

三、多态

多态性依赖于继承。从一个父类派生出多个子类,可以使子类之间有不同的行为,这种行为称之为多态。更直白的说,就是子类重写父类的方法,使子类具有不同的方法实现。

子类与父类拥有同一个方法,子类的方法优先级高于父类,即子类覆盖父类。只要方法存在,参数正确,就可以调用。

如果在子类中定义的一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,那么可以说,子类的方法重写了父类的方法。

方法重写在不同类,是实现多态的必要条件。

四、Account和FreeChecking类的实现

编程要求:补全Account和FreeChecking类的实现。

class Account:
    """An account has a balance and a holder.
    >>> a = Account('John')
    >>> a.deposit(12)
    12
    >>> a.balance
    12
    >>> a.interest
    0.02
    >>> a.time_to_retire(20)
    26
    >>> a.balance               # balance 保持不变
    12
    >>> a.withdraw(11) # 每次取款额度不超过10,超过无法取出
    "Can't withdraw that amount"
    >>> a.withdraw(10)
    2
    >>> a.withdraw(10)
    'Insufficient funds'
    """

    def __init__(self, account_holder):
        self.balance = 0
        self.holder = account_holder

    def deposit(self, amount):
        self.balance = self.balance + amount
        return self.balance

    def withdraw(self, amount):


    def time_to_retire(self, amount):
        """Return the number of years until balance would grow to amount."""
        assert self.balance > 0 and amount > 0 and self.interest > 0




class FreeChecking(Account):
    """A bank account that charges for withdrawals, but the first two are free!
    >>> ch = FreeChecking('Jack')
    >>> ch.balance = 20
    >>> ch.withdraw(100)  # 首次取款免费,不论是否成功,免费次数减少1次
    'Insufficient funds'
    >>> ch.withdraw(3)    # 第二次取款免费
    17
    >>> ch.balance
    17
    >>> ch.withdraw(3)    # 2次免费用完,开始收费
    13
    >>> ch.withdraw(3)
    9
    >>> ch2 = FreeChecking('John')
    >>> ch2.balance = 10
    >>> ch2.withdraw(3) # 首次免费
    7
    >>> ch.withdraw(3)  # 2次免费
    5
    >>> ch.withdraw(5)  # 余额不足
    'Insufficient funds'
    """


    def __init__(self, account_holder):


    def withdraw(self, amount):


import doctest
doctest.testmod()

具体实现:

class Account:
    # 此处已经略去case
    
    # 利率
    interest = 0.02
    # 最大取款额度
    max_amount = 10
    def __init__(self, account_holder):
        self.balance = 0
        self.holder = account_holder
        self.interest = Account.interest

    def deposit(self, amount):
        self.balance = self.balance + amount
        return self.balance

    def withdraw(self, amount):
        # 取款超过最大取款额度,不让取款
        if (amount > Account.max_amount):
            return "Can't withdraw that amount"
        # 余额不足,不让取款
        if (self.balance < amount):
            return 'Insufficient funds'
        self.balance -= amount
        return self.balance

    def time_to_retire(self, amount):
        """Return the number of years until balance would grow to amount."""
        assert self.balance > 0 and amount > 0 and self.interest > 0
        # 账户余额 = 本金+本金*(1+利息)
        amounts = self.balance
        years = 0
        while True:
            amounts += amounts * self.interest
            years += 1
            if (amounts >= amount):
                return years



class FreeChecking(Account):
 	# 此处已经略去case
 	
    # 初始账户余额
    init_balance = 20
    # 免费取款次数
    free_draw_times = 2
    # 取款手续费
    draw_fee = 1

    def __init__(self, account_holder):
        self.balance = FreeChecking.init_balance
        self.holder = account_holder
    def withdraw(self, amount):
        # 如果账户余额小于取款额度,不能取款,次数减一
        if (self.balance < amount):
            self.free_draw_times -= 1
            return 'Insufficient funds'
        # 如果免费次数大于0小于3,免费取款
        if (self.free_draw_times > 0 and self.free_draw_times < 3):
            self.balance -= amount
        # 否则收费取款
        else:
            # 如果存款比手续费加取款额度少,不让取款
            if (self.balance - (amount + FreeChecking.draw_fee) < 0):
                return 'Insufficient funds'
            # 可以取款
            self.balance -= (amount + FreeChecking.draw_fee)
        # 免费次数减一
        self.free_draw_times -= 1
        return self.balance

import doctest
doctest.testmod()

五、总结撒花😊

本文主要讲解了Python中的继承和多态的基本使用。😊

这就是今天要分享给大家的全部内容了,我们下期再见!😊

🏠 本文由初心原创,首发于CSDN博客, 博客主页:初心%🏠

🏠 我在CSDN等你哦!😍


http://lihuaxi.xjx100.cn/news/1175624.html

相关文章

我是如何利用业余时间写书的?---时间管理

低级的欲望放纵即可获得&#xff0c;高级的欲望只有克制才能达成。——卡耐基粉丝的误会 很多粉丝&#xff0c;问我&#xff0c; “彭老师你是不是自己创业了&#xff1f;” “彭老师我想报您的培训班。” … 得知我知识业余时间写文章&#xff0c;紧接着又会问&#xff0c; …

apache-jmeter:点击可视化界面闪退和中文乱码Failed to write core dump

目录 1、点击界面闪退1.1、问题描述1.2、解决方法 2、处理返回结果乱码问题3、中文界面乱码3.1、问题描述3.2、解决方法 1、点击界面闪退 1.1、问题描述 Java运行环境 $ java -version java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_25…

docker版jxTMS使用指南:python服务之访问数据库

本文讲解4.0版jxTMS中python服务访问数据库&#xff0c;docker版jxTMS使用指南&#xff1a;4.0版升级内容 docker版本的使用&#xff0c;请参考&#xff1a;docker版jxTMS使用指南 上篇文章讲解了如何用jxMysq的ORM定义并利用其类函数、对象函数访问数据库&#xff0c;本文讲…

公司新来了个一年测试经验拿15K的,发现是个00后卷王····

个个都说想躺平了&#xff0c;可是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;才工作一年&#xff0c;跳槽到我们公司起薪15K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

AB Test数学原理及金融风控应用

1 什么是AB Test AB测试是一种常用的实验设计方法&#xff0c;用于比较两个或多个不同处理或策略的效果&#xff0c;以确定哪个处理或策略在某个指标上表现更好。在AB测试中&#xff0c;将随机选择一部分用户或样本&#xff0c;将其分为两个或多个组&#xff0c;每个组应用不同…

chatgpt赋能python:Python文件拆分技巧详解

Python 文件拆分技巧详解 随着数据量的不断增大&#xff0c;我们经常需要处理非常大的数据文件&#xff0c;这时候就需要用到文件拆分技巧。在Python中&#xff0c;文件拆分可以帮助我们提高数据处理的效率&#xff0c;这是一个非常实用的技巧。在本篇文章中&#xff0c;我们将…

RTOS专栏(一) —— rt-thread简单介绍和qemu使用

本期主题&#xff1a; 简单介绍rt-thread介绍qemu和rt-thread怎么配合使用qemu的简单例子 rt-thread & qemu 1.rt-thread介绍2.qemu介绍3.搭建rt-thread和qemu开发环境4.简单例子 1.rt-thread介绍 RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统&#xff0…

java基础入门-15-【集合(Map可变参数集合工具类)】

Java基础入门-15-【集合(Map&可变参数&集合工具类)】 24、集合(Map&可变参数&集合工具类)双列集合的特点1.Map集合1.1 Map集合概述和特点【理解】1.2 Map集合的基本功能【应用】1.3 Map集合的获取功能【应用】1.4 Map集合的遍历(方式1)【应用】----- 键找值…