Python 继承

【Python】继承 在Python的面向对象编程(Object-Oriented Programming, OOP)范式中,继承(Inheritance)无疑是三大核心支柱(封装、继承、多态)之一。它不仅仅是一种代码复用的机制,更是一种设计思想,一种构建层次化、模块化、可扩展软件系统的强大工具。本章将从最基础的“为什么”出发,层层深入,揭示继承在软件工程中的核心价值,并为后续的深入剖析奠定坚实的基础。在深入继承之前,我们必须对OOP的一些基本概念有清晰的认识。因为继承是建立在这些概念之上的。那么,继承在OOP中扮演什么角色呢? 阅读详情

如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称谓父类,而新类称为子类。子类除了继承父类的所有属性和方法,还可以定义自己的属性和方法。

1. 继承父类所有的属性和方法,也可以给子类定义属于自己的属性和方法,如下面例子所示

lass Restaurant: # ①
    """一次模拟餐馆的尝试"""
    def __init__(self, restaurant_name, cuisine_type):
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type

    def describe_restaurant(self):
        print("The restaurant name is: " + self.restaurant_name.title() +".")
        print("The cuisine type is: " + self.cuisine_type.title() + ".")

    def open_restaurant(self):
        print(self.restaurant_name + " is openning for 24 hours.")

class IceCreamStand(Restaurant): # ②
    """冰淇淋小店的特色之处"""
    def __init__(self, restaurant_name, cuisine_type): # ③
        super().__init__(restaurant_name, cuisine_type) # ④
        self.flavors = ['strawberry', 'chocolate', "buleberry", "raspberry"] # ⑤
    def describe_flavors(self): # ⑥
        """关于利用属性self.flavors的方法"""
        print("The taste of icecreams is as fallow: ")
        for flavor in self.flavors:
            print(flavor)

favorite_shop = IceCreamStand("kfc_icecream", "sweets") # 子类IceCreamStand的实例
favorite_shop.describe_restaurant() # 调用父类的方法describe_restaurant()
favorite_shop.open_restaurant() # 调用父类的方法open_restaurant()
favorite_shop.describe_flavors() # 调用子类才有的方法describe_flavors()

# 更多的讲解
# 1. 首先是类Restaurant的代码,如(①处)。**创建子类时,父类必须包含在当前文件中,且位于子类的前面**。
# 2. 定义子类IceCreamStand 时,必须在括号内指定父类的名称。如(②处)
# 3. 方法__init__(),接收创建Restaurant实例所需的信息。 (如③ 处)
# 4. super()是一个特殊的函数,帮助python把父类和子类关联起来。在④ 处的代码,让Python调用IceCreamStand的父类的方法__init__(),让子类IceCreamStand实例包含父类的所有属性。父类也称为超类(superclass).
# 在⑤处,创建了一个新的属性,self.flavors,并设置其默认值为一个列表。根据IceCreamStand类创建的所有实例都将包含这个属性,而所有Restaurant实例都不包含它。
# 在⑥处,创建了一个使用属性self.flavors()的方法。

# 输出结果为
The restaurant name is: Kfc_Icecream.
The cuisine type is: Sweets.
kfc_icecream is openning for 24 hours.
The taste of icecreams is as fallow: 
strawberry
chocolate
buleberry
raspberry

2. 重写父类的方法

对于父类,如果它不符合子类实例的行为,都可进行重写。为此可在子类中定义一个这样的方法,即它与要重写父类的方法同名。这样,python将不会考虑这个父类的方法,而只关注你在子类中定义的相应方法。

3. 将实例用作属性,如下面的例子所示

class User: # 创建类User
    """一次模拟用户的简单尝试"""
    def __init__(self, first_name, last_name, working_place):
        """初始化属性first_name, last_name 和 working_place"""
        self.first_name = first_name
        self.last_name = last_name
        self.working_place = working_place
        self.login_attempts = 0
    def describe_user(self):
        """描述用户的基本用户信息"""
        print("The user's first name is " + self.first_name.title() + ".")
        print("The user's last name is " + self.last_name.title() + ".")
        print("The user's working place is " + self.working_place.title() + ".")
    def greet_user(self):
        """向用户打招呼"""
        print("Good morning! " + self.first_name + " " + self.last_name)
    def increment_login_attempts(self, login):
        """将属性login_attempts的值加1"""
        self.login_attempts += login
        print("当前登录的人数为 " + str(self.login_attempts))

class Privileges: # 创建类Privileges
    def __init__(self):
        self.privileges = ['can add post', 'can delete post', 'can ban user'] # ③

    def show_privileges(self):
        print("The administrator has the following privileges: ")
        for privilege in self.privileges:
            print(privilege)

class Admin(User): # 创建类Admin,该类是User类的子类
    def __init__(self, first_name, last_name, working_place):
        super().__init__(first_name, last_name, working_place)
        self.rights = Privileges() # ①

first_admin = Admin("meng", "chen", "canton") # 创建Admin的实例
first_admin.rights.show_privileges() #  ②

# 更多的解释
# 在①处,我们定义了一个名为self.rights的属性。在①处的代码让python创建一个新的Privileges实例(由于没有指定任何实参,因此使用③处指定的默认值),并将该实例存储在属性self.rights中。
# 在②处的代码让Python在实例first_admin中查找属性rights,并将存储在该属性中的Privileges实例调用方法show_privileges()。

# 输出结果为:
The administrator has the following privileges: 
can add post
can delete post
can ban user

爬虫瑞数5案例:联通 瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。 阅读详情

相关推荐

SAP PS模块预算控制实战:为什么你的采购订单金额和预算占用对不上?

本文深入解析SAP PS模块中采购订单金额与预算占用偏差的常见问题,揭示承诺成本与实际成本的分流处理机制。通过实战案例和六步定位法,提供发票拆分、跨年度预算等典型场景的解决方案,并分享预防性配置框架和最佳实践,帮助企业有效控制预算偏差。

weixin_30363981的博客 515

python编程 从入门到实践 第九章 类(上)

类中的函数称为方法 class Dog: def __init__(self,name,age): """初始化name和age""" self.name=name self.age=age def sit(self): print(f"{self.name}is now sitting") def roll_over(self): print(f"{self.name} rolled over!") my_dog=Dog('欢欢',6) print(f"my dog`s

flyable的博客 736

【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere

银河麒麟作为国家核高基专项的重要成果,国防版凭借其卓越的安全性和可靠性,已成为军工领域的首选操作系统。之前我们在适配麒麟V4国防版的过程中已发现诸多安全性要求,而麒麟V10国防版在安全防护等级上又达到了更高的级别。本文将主要演示离线部署,因为军工项目基本不会出现联网场景。即使在线,也可以按离线方式部署,且离线部署由于有私有仓库,不会存在镜像获取不到和丢失情况。

jiaworld的博客 730

家庭英语启蒙:利用情景剧《Our Family》提升孩子语言能力

情景剧作为一种语言学习工具,通过模拟真实生活场景帮助学习者自然习得语言表达。其原理在于创设沉浸式语言环境,让学习者在观看剧情过程中潜移默化地掌握词汇和句型。这种方法的优势在于将抽象的语言知识具象化,有效提升学习兴趣和记忆效果。在英语启蒙教育领域,情景剧特别适合家庭场景应用,能够弥补传统教材的不足。《Our Family》作为优质英语学习资源,包含140集真实家庭生活情景,通过角色扮演和情景联想等教学方法,帮助3-12岁儿童在轻松氛围中提升听说能力。该资源注重听力训练和口语练习的有机结合,家长可通过分层训练法

weixin_33812433的博客 449

别再手动算考勤了!教你用Python+企业微信API自动生成月度报表

本文介绍如何利用Python和企业微信API构建自动化考勤分析系统,实现从数据获取到可视化报表生成的全流程自动化。通过企业微信打卡接口获取数据,使用Pandas进行高效清洗和分析,并生成Excel和HTML格式的报表,大幅提升考勤统计效率。系统支持智能判定考勤状态,如迟到、早退等,并可通过定时任务实现月度自动化运行。

weixin_27875131的博客 290

Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门

莉莉丝游戏-Golang后端开发-中台部门 开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。 聊项目,介绍IM架构以及使用Go写的服务简介 动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的? 如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等 如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点 消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK 发送失

xmcy001122的专栏 3899

python基础知识选择题-Python 基础知识考题与解答(2020 版)

一、 单项选择题(每题 2 分,总共 20 分)1、 [1,2,3]+[4,5,6] 的结果是多少? ( D )A.[6][15]B . [1,2,3][4,5,6]C. [21]D. [1,2,3,4,5,6]2、 可以避免类型错误的函数是?( A )A. str()B. vars()C. type()D. chr()3、 假设有这样的一个示例:types=...

weixin_37988176的博客 2万+

Fast DDS源代码走读

DDS, PDP, EPD, DataWriter, DataReader

weixin_43082062的博客 713

Python中类的继承

1. 单继承 继承的主要作用是实现代码的重用。继承使得子类拥有父类的方法和属性。 直接来看一个例子吧。 class animal: def eat(self): print("吃") def drink(self): print("喝") class dog(animal): def dark(self): print("汪汪叫") goudan = dog() goudan.eat() goudan.drink() 从上面的代码可以看出,在编写dog类的时候,我们并没有

hello_JeremyWang的博客 3万+

《科研伦理与学术规范》 全部 习题_答案 2020年秋

科研伦理与学术规范 答案 文章目录科研伦理与学术规范 答案1. 第一章课后习题(必做) 答案1.1 第一章Demo2. 第二章课后习题(必做) 答案3. 第三章课后习题(必做) 答案4. 第四章课后习题(必做) 答案5. 第五章课后习题(必做) 答案6. 第六章课后习题(必做) 答案 # 每行5题 #写于2020.11.17 侵删 1. 第一章课后习题(必做) 答案 ABC, A, B ,D ,ABCD ABC, D, A, BCD, C D, D, 1.1 第一章Demo

羊老羊 25万+

激光雷达接收芯片选型指南:APD、SiPM、SPAD阵列的优缺点对比

本文深入对比了激光雷达接收芯片APD、SiPM和SPAD阵列的核心技术原理与性能差异。APD作为线性模式工作的稳健选择,动态范围大;SiPM具备单光子探测和高增益优势;而SPAD阵列凭借像素级数字读出和集成TDC,在时间分辨率与系统集成度上领先。文章从灵敏度、时间精度、动态范围及系统成本等多维度剖析,为不同应用场景(如车载雷达、Flash LiDAR、消费电子)的芯片选型提供实战指南。

ik6789012的博客 656

Python中类的继承、多层继承和多继承

Python中类的继承、多层继承和多继承 Python中,一个类可以通过继承的方式来获得父类中的非私有属性和非私有方法。 一、继承、重写、和调用重写的父类方法 继承的语法为在类名后的小括号()中写入要继承的父类名,如果要继承多个类则中间用逗号分隔。 class Electrical(object): def __init__(self, name): self....

weixin_43790276的博客 7075

外部PLC触发VisionMaster多流程运行

上一讲,介绍了海康VisionMaster与西门子PLC1200进行S7通信。在前一讲的基础上,讲解如何通过PLC触发,实现VisionMaster的多流程运行。

haier123888的博客 4653

Python3--继承,多继承

一.继承(一)编写类时,并非总是要从空白开始。如果你要编写的类时另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获取另一个类的所有属性和方法;原有的类称为父类(基类),而新类称为子类(派生类)。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。继承的意义:重用代码,方便代码的管理和修改#类定义 class people: #定义基本属性 name =...

小菜鸟的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python继承

继承 1.什么是继承 继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。继承就是可以获取另外一个类的静态属性或者普通方法,(并非所有成员)。 在Python中,新建的类可以继承一个或者多个父类,父类又可以称为基类或者超类,新建的类称为派生类或子类。 注意:python的继承分为:单继承和多继承 2.继承中子类和父类的概念 父类:用于被继承的类,称之为父类,又叫做基类或者超类。 子...

qq_44700820的博客 5859

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python——类的继承

1.继承的实现 Python中继承语法格式如下: class 子类名(父类名): 类的属性 类的方法 例 7-11 类的继承示例,子类继承父类方法: #ex0711.py 类的继承示例,子类继承父类方法 class Animal: num = 0 def __init__(self): print("父类 Animal") def show(self): print("父类 Animal 成员方法") class Cat(Animal):

XQC_KKK的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python继承的好处_Python的继承

何为继承在现实生活中,继承,意味着一个人从另外一个人那里得到了某些东西,比如优秀的品质或者万贯的家财。在编程中,继承相对来说是有明确规定和预期结果的。类别A继承制类别B,那么A称之为子类,B称之为父类或者超类。继承使得子类拥有父类的非私有方法和属性,子类中可以不用写重复的代码。而子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类原有的属性很方法,使其获得与父类不同的功能。子类可以...

weixin_39829574的博客 1121

Python Class 类的继承与多继承

Python Class 类的继承与多继承1、继承概念2、继承中的访问控制3、示例3.1 示例 13.2 示例 23.3 示例 33.4 示例 43.5 示例 53.6 示例 63.7 示例 73.8 示例 83.9 示例 94、多继承4.1 概念介绍4.2 多继承语法4.3 类装饰器4.4 `Mixin` 类4.5 `Mixin` 示例 1、继承概念 面向对象的三要素之一:继承 inheritance 在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码、多复用。子类可

weixin_44983653的博客 4192

python多继承

如果多个父类中有同名的方法,Python 将按照一定的顺序来决定哪个方法会被调用,这个顺序由 MRO(Method Resolution Order)来决定,Python 使用 C3 算法来计算多继承中的 MRO。MRO 算法的原则是尽可能地保持继承顺序不变,即先继承的类先被搜索,同级别的父类按照它们在类定义中出现的顺序被搜索。2.明确调用父类的方法。钻石继承指的是在一个继承关系中,某个类同时继承了两个或更多个父类,而这些父类又有一个共同的祖先类,因此在继承关系图中形成了一个钻石形状。

liulanba的博客 1万+

python中的继承冲突及继承顺序

本文介绍了python多继承中的继承冲突及python中解决继承顺序的Mro C3算法。

m0_56745306的博客 1777

python继承怎么写_python 继承

一、简介1、作用简化代码2、分类一个父类可以被多个多个子类继承一个子类可以继承多个父类---python独有3、新式类和经典类python3中,只含义新式类,新式类默认继承Objectpython2.7中含义经典类和新式类,新式类需要继承Object4、方法类名.__base__查看该类的继承顺序类.mro(),返回类的调用顺序classA:print('A')classB(A):print('B...

weixin_42516710的博客 1640

Python-继承

python继承 单继承,多继承

aaaccc444的博客 5925

python中类的继承

类的继承是面向对象编程中的重要概念,它允许一个类(子类)获取另一个类(父类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在此基础上添加自己的特定属性和方法,从而实现代码的复用和扩展。在类的继承中,父类通常包含一些通用的属性和方法,而子类可以继承这些通用的特性。子类可以通过继承获得父类的属性和方法,并且可以根据需要进行修改或扩展。这种机制使得代码更具有灵活性和可维护性。通过类的继承,我们可以建立类之间的层次关系,形成类的继承链。

2301_77444219的博客 5418

python继承方案_Python 继承

Python 继承一、继承概念面向对象中的继承和现实生活中的继承是一个意思。如:子承父业被继承的类称为:"基类"、"父类"或者"超类"继承方式1.实现继承实现继承是指使用基类的属性和方法而无需额外编码的能力2.接口继承接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法)在继承中子类可以继承多个基类,但一般都是一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实...

weixin_39689297的博客 254

什么是python继承_python之继承

继承什么是继承继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为原始类,新建的类称为新类或子类首先先创建一个父类classParentClass1: #定义父类passclassParentClass2: #定义父类passclassSubClass1(ParentClass1): #单继承,父类是ParentClass1,子类是SubClasspasscla...

weixin_39616287的博客 430

Python类的继承与多继承

Python类的继承与多继承 继承 两个中有大量重复的代码,是否能够只写一次 ?抽象出一个更抽象的类,放公共代码 通过继承能够重用代码,方便代码的管理和修改 继承并不是复制变量空间,子类更新成员变量,但是父类的成员变量不会随之更新。 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:...

高志远的博客 2843
上一篇: python 类
下一篇: Python OrderedDict 类
一连有梦咿
博客等级 码龄7年 11粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值