Python面向对象高级与Python的异常、模块以及包管理

Python面向对象高级与Python的异常、模块以及包管理

一、Python中的继承

1、什么是继承

我们接下来来聊聊Python代码中的“继承”:类是用来描述现实世界中同一组事务的共有特性的抽象模型,但是类也有上下级和范围之分,比如:生物 => 动物 => 哺乳动物 => 灵长型动物 => 人类 => 黄种人

从哲学上说,就是共性与个性之间的关系,比如:白马和马!所以,我们在OOP代码中,也一样要体现出类与类之间的共性与个性关系,这里就需要通过类的继承来体现。简单来说,如果一个类A使用了另一个类B的成员(属性和方法),我们就可以说A类继承了B类,同时这也体现了OOP中代码重用的特性

2、继承的基本语法

假设A类要继承B类中的所有属性和方法(私有属性和私有方法除外)

class B(object):passclss A(B):passa = A()
a.B中的所有公共属性
a.B中的所有公共方法

案例:Person类与Teacher、Student类之间的继承关系

class Person(object):def eat(self):print('i can eat food!')def speak(self):print('i can speak!')class Teacher(Person):passclass Student(Person):passteacher = Teacher()
teacher.eat()
teacher.speak()student = Student()
student.eat()
studnet.speak()

3、与继承相关的几个概念

继承:一个类从另一个已有的类获得其成员的相关特性,就叫作继承!

派生:从一个已有的类产生一个新的类,称为派生!

很显然,继承和派生其实就是从不同的方向来描述的相同的概念而已,本质上是一样的!

父类:也叫作基类,就是指已有被继承的类!

子类:也叫作派生类或扩展类

扩展:在子类中增加一些自己特有的特性,就叫作扩展,没有扩展,继承也就没有意义了!

单继承:一个类只能继承自一个其他的类,不能继承多个类,单继承也是大多数面向对象语言的特性!

多继承:一个类同时继承了多个父类, (C++、Python等语言都支持多继承)

4、单继承

单继承:一个类只能继承自一个其他的类,不能继承多个类。这个类会有具有父类的属性和方法。

基本语法:

# 1、定义一个共性类(父类)
class Person(object):pass
# 2、定义一个个性类(子类)
class Teacher(Person):pass

案例:比如汽车可以分为两种类型(汽油车、电动车)

# 1、定义一个共性类(车类)
class Car(object):def run(self):print('i can run')
# 2、定义汽油车
class GasolineCar(Car):pass
# 3、定义电动车
class EletricCar(Car):passbwm = GasolineCar()
bwm.run()

5、单继承特性:传递性

在Python继承中,如A类继承了B类,B类又继承了C类。则根据继承的传递性,则A类也会自动继承C类中所有属性和方法(公共)

class C(object):def func(self):print('我是C类中的相关方法func')class B(C):passclass A(B):passa = A()
a.func()

6、编写面向对象代码中的常见问题

问题1:在定义类时,其没有遵循类的命名规则

答:在Python中,类理论上是不区分大小写的。但是要遵循一定的命名规范:首字母必须是字母或下划线,其中可以包含字母、数字和下划线,而且要求其命名方式采用大驼峰。

电动汽车:EletricCar

父类:Father

子类:Son

问题2:父类一定要继承object么?Car(object)

答:在Python面向对象代码中,建议在编写父类时,让其自动继承object类。但是其实不写也可以,因为默认情况下,Python中的所有类都继承自object。

image-20210318104228654

问题3:打印属性和方法时,都喜欢用print

class Person():def __init__(self, name):self.name = namedef speak(self):print('i can speak')# 创建对象,打印属性和方法
p = Person('Tom')
print(p.name)
p.speak()

7、多继承

什么是多继承?

Python语言是少数支持多继承的一门编程语言,所谓的多继承就是允许一个类同时继承自多个类的特性。

image-20210318105709652

基本语法:

class B(object):passclass C(object):passclass A(B, C):passa = A()
a.B中的所有属性和方法
a.C中的所有属性和方法

案例:汽油车、电动车 => 混合动力汽车(汽车 + 电动)

class GasolineCar(object):def run_with_gasoline(self):print('i can run with gasoline')class EletricCar(object):def run_with_eletric(self):print('i can run with eletric')class HybridCar(GasolineCar, EletricCar):passtesla = HybridCar()
tesla.run_with_gasoline()
tesla.run_with_eletric()

注意:虽然多继承允许我们同时继承自多个类,但是实际开发中,应尽量避免使用多继承,因为如果两个类中出现了相同的属性和方法就会产生命名冲突。

8、子类扩展:重写父类属性和方法

扩展特性:继承让子类继承父类的所有公共属性和方法,但是如果仅仅是为了继承公共属性和方法,继承就没有实际的意义了,应该是在继承以后,子类应该有一些自己的属性和方法。

什么是重写?

重写也叫作覆盖,就是当子类成员与父类成员名字相同的时候,从父类继承下来的成员会重新定义!

此时,通过子类实例化出来的对象访问相关成员的时候,真正其作用的是子类中定义的成员!

上面单继承例子中 Animal 的子类 Cat和Dog 继承了父类的属性和方法,但是我们狗类Dog 有自己的叫声’汪汪叫’,猫类 Cat 有自己的叫声 ‘喵喵叫’ ,这时我们需要对父类的 call() 方法进行重构。如下:

class

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束,2024即将开启,每年这个时候,都会简单总结下自己这一年,既是对今年的一个复盘和回顾,也是对新一年的向往和期待。 我的2023年,大概分为 「个人」,「家庭」,「团队」…

C#时间戳转换

时间戳转化为时间 long oldtime1703235741; System.DateTime startTime TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)); var newtimestartTime.AddMilliseconds(oldtime).ToString("yyyy-MM-dd HH:mm:ss.fff"); 时间转化为时…

大创项目推荐 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习OCR中文识别系统 ** 该项目较为新颖,适合作为竞赛课题方向,…

第三节-数据链路层与MAC地址

如果数据进行封装时,基于E2或者802.3标准,此时我们称之为是一个以太网数据帧。 不同的协议栈用于定义和管理不同网络的数据转发规则。 E2和802.3作用:定义帧头和帧尾的格式 数据:对于下层的每个层级而言,上层所反馈…

台阶仪在半导体行业中的广泛应用及其重要意义

台阶仪在半导体材料的表征和研究中是一种非常重要的工具。如在半导体材料的制备过程中,一些关键的工艺参数,如温度、压力、气氛等条件的变化,会导致半导体材料的能带结构发生变化,通过使用台阶仪,可以准确测量和分析材…

C# 读取和设置文件、文件夹权限

C#程序运行时经常遇到文件或文件夹权限问题&#xff0c;导致程序运行失败。为了解决这个头疼的问题&#xff0c;我们通常要读取和设置文件、文件夹权限。 读取文件、文件夹权限 /// <summary>/// 读取文件、文件夹权限/// </summary>/// <param name"path…

axios实例配置和使用

一.vite项目中引入axios 1.1.安装axios pnpm add axios --save 二.配置axios实例 2.1实例配置 import axios from ‘axios’ import router from ‘/router’ const instance axios.create({ baseURL:“http://127.0.0.1:8080”, timeout:10*1000, //最长响应时间 }) instan…

【Qt-QWidget-QLabel-QFrame-QSlider-View-Bar】

Qt编程指南 ■ Label■ QLabel■ QMovie 显示动画■ Widget■ QWidget■ QTabWidget■ QTableWidget■ QListWidget■ QStackedWidget■ QCalendarWidget■ QFrame■ QFrame■ View■ QT

2023.12.29 Python面向对象 封装_继承_多台

目录 1.封装-私有与公开权限 2.继承 2.1多继承 2.2继承多层传递 2.3重写父类方法 2.4继承链 2.5禁止私有继承 3.多态 4.总结 1.封装-私有与公开权限 公开属性、公开方法&#xff1a;随便调用 私有属性、私有方法&#xff1a; 只能在类定义的内部调用 以两个下划线开头__的…

Object 和Json字符串互转工具类

Object 和Json字符串互转 引入依赖的jar包 <!-- jackson --> <dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-guava</artifactId><version>2.5.3</version> </dependency&…

Docker:登录私有仓库\退出私有仓库

一、登录仓库 docker login : 登录到一个Docker镜像仓库&#xff0c;如果未指定镜像仓库地址&#xff0c;默认为官方仓库 Docker Hub 语法: docker login [OPTIONS] [SERVER] docker login -u 用户名 -p 密码 仓库名称 # 登入私有仓库 [rootlocalhost ~]# docker login --…

归并算法:分治而治的高效算法大揭秘(图文详解)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并算法是我们算法中最常见的算法之一&#xff0c;其思想非常巧妙。本身归并是只能归并有序数组…

一文带你掌握Flutter dio网络请求库的封装

highlight: an-old-hope 封装网络库考虑的几个方面&#xff1a; 请求参数的封装&#xff1a; 将请求所需的参数进行封装&#xff0c;例如 URL、请求头、请求体等。可以定义一个统一的数据结构或模型类来表示请求参数&#xff0c;以便于传递和管理。 响应结果的封装&#xff…

源码解析:mybatis调用链之获取sqlSession

SqlSession 通过SqlSession sqlSession sqlSessionFactory.openSession();获取SqlSession实例&#xff0c; DefaultSqlSessionFactory public SqlSession openSession() {return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}//从数据…

蓝牙物联网智能安防系统设计方案

1概述 安防系统(安全防护)的作用是预防损失&#xff0c;是人们保障人身和财产安全最重要的工具之一。近年来&#xff0c;伴随经济的飞速发展和城市人口的急剧增加&#xff0c;盗窃、入室抢劫等事件的增多给人们的安定生活带来了很大的影响&#xff0c;同时&#xff0c;交通的快…

安装DataEase(Linux线上安装)修改端口

问题一&#xff1a;端口更改 警告本解决方法仅仅应急&#xff0c;如果找到了更好的方法请通知我&#xff0c;感谢你的理解&#xff01;&#xff01;&#xff01; 为了让mysql与dataease的端口不发生冲突&#xff0c;将 MySQL 外部运行端口参数 ${DE_MYSQL_PORT} 改为新端口&am…

鹏城杯2023初赛 Reverse WriteUp

一. 安全编程 rust逆向&#xff0c;直接动调 定位关键函数sub_7FD043E88C70 下断点跟进 观察控制台 guess number plz input 1-10 number 这时我们随便输入一个数&#xff0c;往下跟进 .text:00007F14B3684E9B .text:00007F14B3684E9B loc_7F14B3684E9B: .text:00007F14B…

拓扑排序笔记

这段代码通过拓扑排序对有向无环图进行排序。它创建了一个图结构&#xff0c;其中包含节点、邻接表和入度数组。然后&#xff0c;通过输入添加了一些边&#xff0c;创建了图的结构。接着&#xff0c;使用拓扑排序算法对图进行排序&#xff0c;并将排序后的结果打印输出。 首先…

C++如何获取随机浮点数

在C中&#xff0c;可以使用标准库中的<random>头文件来生成随机浮点数。以下是一个简单的例子&#xff1a; #include <iostream> #include <random>int main() {// 创建一个随机数生成器对象std::random_device rd;std::mt19937 gen(rd());// 创建一个均匀分…

使用FFmpeg进行录屏

不用下载那些录屏软件&#xff0c;安装了FFmpeg的话&#xff0c;直接实现 使用FFmpeg进行屏幕录制可以通过以下步骤实现&#xff1a; 安装FFmpeg&#xff1a;首先需要在您的系统上安装FFmpeg。可以通过包管理器&#xff08;如apt、yum等&#xff09;或从官方网站下载并编译安装…