Python面向对象详解

2023-01-11 0 257

上面从这两个各方面来详尽简述python面向第一类:

贝唐第一类核心成员方式类和第一类算式其他内建方式PCB承继类别注释隐式综合性事例一、贝唐第一类日常生活中统计数据的组织机构

幼儿园开课,明确要求小学生核对他们的此基础重要信息,一人发聚花,让小学生他们填。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

改成申请表,列印出让小学生另行核对:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

流程中统计数据的组织机构

在流程中单纯采用表达式来历史记录小学生重要信息

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

采用第一类组织机构统计数据

在程序中是能努力做到和日常生活中那般,结构设计表单、制造表单、核对表单的组织机构方式的。

1. 在流程中结构设计表单,他们称作:结构设计类(class)

2. 在流程中列印制造表单,他们称作:创建第一类

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

3. 在流程中核对表单,他们称作:第一类特性表达式

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

二、核心成员方式类的定义和采用

在上一节中,他们单纯了解到能采用类去PCB特性,并基于类创建出一个个的第一类来采用。现在他们来看看类的采用语法:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

核心成员表达式和核心成员方式

那么,什么是类的行为(方式)呢?

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

能看出,类中:

不仅能定义特性用来历史记录统计数据也能定义函数,用来历史记录行为

其中:

类中定义的特性(表达式),他们称作:核心成员表达式类中定义的行为(函数),他们称作:核心成员方式核心成员方式的定义语法

在类中定义核心成员方式和定义函数基本一致,但仍有细微区别:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

能看到,在方式定义的参数列表中,有一个:self关键字

self关键字是核心成员方式定义的时候,必须核对的。

它用来表示类第一类自身的意思当他们采用类第一类调用方式的是,self会自动被python传入在方式内部,想要访问类的核心成员表达式,必须采用self
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

注意事项

self关键字,尽管在参数列表中,但是传参的时候能忽略它。如:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

能看到,在传入参数的时候,self是透明的,能不用理会它。

三、类和第一类现实世界的事物和类

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

现实世界的事物也有特性和行为,类也有特性和行为。采用流程中的类,能完美的描述现实世界的事物。

类和第一类

基于类创建第一类的语法:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

类只是一种流程内的“结构设计图纸”,需要基于图纸制造实体(第一类),才能正常工作这种套路,称作:面向第一类编程。

采用类和第一类描述现实事物

在现实中,制造事物

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

在流程中通过类来描述

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

基于类创建第一类

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

这就是面向第一类编程:结构设计类,基于类创建第一类,由第一类做具体的工作。

四、算式属性(核心成员表达式)的表达式

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

算式

Python类能采用:__init__()方式,称作算式。

能实现:

在创建类第一类(构造类)的时候,会自动执行。在创建类第一类(构造类)的时候,将传入参数自动传递给__init__方式采用。
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

算式注意事项

重要的事情说三遍,算式名称:__init__ __init__ __init__ , 千万不要忘记init前后都有2个下划线算式也是核心成员方式,不要忘记在参数列表中提供:self在算式内定义核心成员表达式,需要采用self关键字
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

这是因为:表达式是定义在算式内部,如果要成为核心成员变量,需要用self来表示。

五、其他内建方式魔术方式

上文学习的__init__ 算式,是Python类内建的方式之一。

这些内建的类方式,各自有各自特殊的功能,这些内建方式他们称作:魔术方式

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

__str__ 字符串方式

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

当类第一类需要被转换为字符串之时,会输出如上结果(内存地址)

内存地址没有多大作用,他们能通过__str__方式,控制类转换为字符串的行为。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
方式名:__str__返回值:字符串内容:另行定义__lt__ 小于符号比较方式
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

直接对2个第一类进行比较是不能的,但是在类中实现__lt__方式,即可同时完成:小于符号 和 大于符号 2种比较

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

__le__ 小于等于比较符号方式

魔术方式:__le__可用于:<=、>=两种比较运算符上。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

__eq__,比较运算符实现方式

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

不实现__eq__方式,第一类之间能比较,但是是比较内存地址,也即是:不同第一类==比较一定是False结果。

实现了__eq__方式,就能按照他们的想法来决定2个第一类是否相等了。

六、PCB面向第一类的三大特性

面向第一类编程,是许多编程语言都支持的一种编程思想。

单纯理解是:基于模板(类)去创建实体(第一类),采用第一类完成功能开发。

面向第一类包含3大主要特性:

PCB承继隐式PCB

PCB表示的是,将现实世界事物的:

特性行为

PCB到类中,描述为:

核心成员表达式核心成员方式
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

从而完成流程对现实世界事物的描述。

对用户隐藏的特性和行为

现实世界中的事物,有特性和行为。

但是不代表这些特性和行为都是开放给用户采用的。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

苹果越狱、安卓root,也是为了突破权限采用这些对用户隐藏的特性和行为。

私有核心成员

既然现实事物有不公开的特性和行为,那么作为现实事物在流程中映射的类,也应该支持。

类中提供了私有核心成员的方式来支持。

私有核心成员表达式私有核心成员方式

定义私有核心成员的方式非常单纯,只需要:

私有核心成员表达式:表达式名以__开头(2个下划线)私有核心成员方式:方式名以__开头(2个下划线)
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

即可完成私有核心成员的设置

采用私有核心成员

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

私有核心成员无法被类第一类采用,但是能被其他的核心成员采用。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

七、承继承继的引出

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

如果你是结构设计师,你会如何选择?

每一代新款手机,都从零开始出结构设计图基于老款的结构设计图,修修改改
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

单承继

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
Python面向对象详解
关上腾讯新闻报道 查阅精彩图片

承继分为:单承继和多承继

采用如图语法,能完成类的单承继。

承继表示:将从父类那里承继(复制)来核心成员表达式和核心成员方式(不含私有)

多承继

Python的类之间也支持多承继,即一个类,能承继多个父类

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

多承继注意事项

多个父类中,如果有同名的核心成员,那么默认以承继顺序(从左到右)为优先级。即:先承继的保留,后承继的被覆盖。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

八、类别注释复写

子类承继父类的核心成员特性和核心成员方式后,如果对其“不满意”,那么能进行复写。

即:在子类中重新定义同名的特性或方式即可。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

调用父类同名核心成员

一旦复写父类核心成员,那么类第一类调用核心成员的时候,就会调用复写后的新核心成员

如果需要采用被复写的父类的核心成员,需要特殊的调用方式:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

8.1 表达式的类别注释

为什么需要类别注释

在PyCharm中编写代码,他们经常能够见到如下提示:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

自动提示可用方式,因为PyCharm确定这个第一类,是list类别。

同样,他们换一份代码:

定义一个函数func,接收一个参数data

你会发现,PyCharm不会在做出任何提示了

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

又或者当他们调用方式,进行传参的时候(快捷键ctrl + p弹出提示):

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

类别注释

Python在3.5版本的时候引入了类别注释,以方便静态类别检查工具,IDE等第三方工具。

类别注释:在代码中涉及统计数据交互的地方,提供统计数据类别的注释(显式的说明)。

主要功能:

帮助第三方IDE工具(如PyCharm)对代码进行类别推断,协助做代码提示帮助开发者自身对表达式进行类别注释

支持:

表达式的类别注释函数(方式)形参列表和返回值的类别注释

类别注释的语法

为表达式设置类别注释

此基础语法: 表达式: 类别

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX
Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

除了采用 表达式: 类别, 这种语法做注释外,也能在注释中进行类别注释。

语法:

# type: 类别

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

为表达式设置注释,显示的表达式定义,一般无需注释:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

如图,就算不写注释,也明确的知晓表达式的类别

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

类别注释的限制

类别注释主要功能在于:

帮助第三方IDE工具(如PyCharm)对代码进行类别推断,协助做代码提示帮助开发者自身对表达式进行类别注释(备注)

并不会真正的对类别做验证和判断。

也就是,类别注释仅仅是提示性的,不是决定性的

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

如图代码,是不会报错的哦。

8.2 函数(方式)的类别注释

函数(方式)的类别注释 – 形参注释

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

如图所示:

在编写函数(方式),采用形参data的时候,工具没有任何提示在调用函数(方式),传入参数的时候,工具无法提示参数类别

这些都是因为,他们在定义函数(方式)的时候,没有给形参进行注释

函数和方式的形参类别注释语法:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

函数(方式)的类别注释 – 返回值注释

同时,函数(方式)的返回值也是能添加类别注释的。

语法如下:

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

8.3 Union类别

Python面向对象详解
打开腾讯新闻报道 查阅TNUMBERBX

采用Union[类别, ……, 类别]

能定义联合类别注释

Union联合类别注释,在表达式注释、函数(方式)形参和返回值注释中,均可采用。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

九、多态

隐式,指的是:多种状态,即完成某个行为时,采用不同的第一类会得到不同的状态。如何理解?

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

同样的行为(函数),传入不同的第一类,得到不同的状态。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

隐式常作用在承继关系上.

比如

函数(方式)形参声明接收父类第一类实际传入父类的子类第一类进行工作

即:

以父类做定义声明以子类做实际工作用以获得同一行为, 不同状态

抽象类(接口)

细心的同学可能发现了,父类Animal的speak方式,是空实现

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

为什么要采用抽象类呢?

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

提出标准后,不同的厂家各自实现标准的明确要求。

抽象类就好比定义一个标准,

包含了一些抽象的方式,明确要求子类必须实现。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

十、综合性事例统计数据分析事例

某公司,有2份统计数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的方式进行展示。

Python面向对象详解
关上腾讯新闻报道 查阅TNUMBERBX

统计数据内容

Python面向对象详解
关上腾讯新闻报道 查阅精彩图片
1月份统计数据是普通文本,采用逗号分割统计数据历史记录,从前到后分别是(日期,订单id,销售额,销售省份)2月份统计数据是JSON统计数据,同样包含(日期,订单id,销售额,销售省份)需求分析
Python面向对象详解
关上腾讯新闻报道 查阅精彩图片

作为面向第一类的流程员,他们全程将采用面向第一类的思想来进行任务的开发。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务