上面从这两个各方面来详尽简述python面向第一类:
贝唐第一类核心成员方式类和第一类算式其他内建方式PCB承继类别注释隐式综合性事例一、贝唐第一类日常生活中统计数据的组织机构幼儿园开课,明确要求小学生核对他们的此基础重要信息,一人发聚花,让小学生他们填。
改成申请表,列印出让小学生另行核对:
流程中统计数据的组织机构
在流程中单纯采用表达式来历史记录小学生重要信息
采用第一类组织机构统计数据
在程序中是能努力做到和日常生活中那般,结构设计表单、制造表单、核对表单的组织机构方式的。
1. 在流程中结构设计表单,他们称作:结构设计类(class)
2. 在流程中列印制造表单,他们称作:创建第一类
3. 在流程中核对表单,他们称作:第一类特性表达式
二、核心成员方式类的定义和采用
在上一节中,他们单纯了解到能采用类去PCB特性,并基于类创建出一个个的第一类来采用。现在他们来看看类的采用语法:
核心成员表达式和核心成员方式
那么,什么是类的行为(方式)呢?
能看出,类中:
不仅能定义特性用来历史记录统计数据也能定义函数,用来历史记录行为其中:
类中定义的特性(表达式),他们称作:核心成员表达式类中定义的行为(函数),他们称作:核心成员方式核心成员方式的定义语法在类中定义核心成员方式和定义函数基本一致,但仍有细微区别:
能看到,在方式定义的参数列表中,有一个:self关键字
self关键字是核心成员方式定义的时候,必须核对的。
它用来表示类第一类自身的意思当他们采用类第一类调用方式的是,self会自动被python传入在方式内部,想要访问类的核心成员表达式,必须采用self注意事项
self关键字,尽管在参数列表中,但是传参的时候能忽略它。如:
能看到,在传入参数的时候,self是透明的,能不用理会它。
三、类和第一类现实世界的事物和类
现实世界的事物也有特性和行为,类也有特性和行为。采用流程中的类,能完美的描述现实世界的事物。
类和第一类
基于类创建第一类的语法:
类只是一种流程内的“结构设计图纸”,需要基于图纸制造实体(第一类),才能正常工作这种套路,称作:面向第一类编程。
采用类和第一类描述现实事物
在现实中,制造事物
在流程中通过类来描述
基于类创建第一类
这就是面向第一类编程:结构设计类,基于类创建第一类,由第一类做具体的工作。
四、算式属性(核心成员表达式)的表达式
算式
Python类能采用:__init__()方式,称作算式。
能实现:
在创建类第一类(构造类)的时候,会自动执行。在创建类第一类(构造类)的时候,将传入参数自动传递给__init__方式采用。算式注意事项
重要的事情说三遍,算式名称:__init__ __init__ __init__ , 千万不要忘记init前后都有2个下划线算式也是核心成员方式,不要忘记在参数列表中提供:self在算式内定义核心成员表达式,需要采用self关键字这是因为:表达式是定义在算式内部,如果要成为核心成员变量,需要用self来表示。
五、其他内建方式魔术方式
上文学习的__init__ 算式,是Python类内建的方式之一。
这些内建的类方式,各自有各自特殊的功能,这些内建方式他们称作:魔术方式
__str__ 字符串方式
当类第一类需要被转换为字符串之时,会输出如上结果(内存地址)
内存地址没有多大作用,他们能通过__str__方式,控制类转换为字符串的行为。
直接对2个第一类进行比较是不能的,但是在类中实现__lt__方式,即可同时完成:小于符号 和 大于符号 2种比较
__le__ 小于等于比较符号方式
魔术方式:__le__可用于:<=、>=两种比较运算符上。
__eq__,比较运算符实现方式
不实现__eq__方式,第一类之间能比较,但是是比较内存地址,也即是:不同第一类==比较一定是False结果。
实现了__eq__方式,就能按照他们的想法来决定2个第一类是否相等了。
六、PCB面向第一类的三大特性
面向第一类编程,是许多编程语言都支持的一种编程思想。
单纯理解是:基于模板(类)去创建实体(第一类),采用第一类完成功能开发。
面向第一类包含3大主要特性:
PCB承继隐式PCBPCB表示的是,将现实世界事物的:
特性行为PCB到类中,描述为:
核心成员表达式核心成员方式从而完成流程对现实世界事物的描述。
对用户隐藏的特性和行为
现实世界中的事物,有特性和行为。
但是不代表这些特性和行为都是开放给用户采用的。
苹果越狱、安卓root,也是为了突破权限采用这些对用户隐藏的特性和行为。
私有核心成员
既然现实事物有不公开的特性和行为,那么作为现实事物在流程中映射的类,也应该支持。
类中提供了私有核心成员的方式来支持。
私有核心成员表达式私有核心成员方式定义私有核心成员的方式非常单纯,只需要:
私有核心成员表达式:表达式名以__开头(2个下划线)私有核心成员方式:方式名以__开头(2个下划线)即可完成私有核心成员的设置
采用私有核心成员
私有核心成员无法被类第一类采用,但是能被其他的核心成员采用。
七、承继承继的引出
如果你是结构设计师,你会如何选择?
每一代新款手机,都从零开始出结构设计图基于老款的结构设计图,修修改改单承继
承继分为:单承继和多承继
采用如图语法,能完成类的单承继。
承继表示:将从父类那里承继(复制)来核心成员表达式和核心成员方式(不含私有)
多承继
Python的类之间也支持多承继,即一个类,能承继多个父类
多承继注意事项
多个父类中,如果有同名的核心成员,那么默认以承继顺序(从左到右)为优先级。即:先承继的保留,后承继的被覆盖。
八、类别注释复写
子类承继父类的核心成员特性和核心成员方式后,如果对其“不满意”,那么能进行复写。
即:在子类中重新定义同名的特性或方式即可。
调用父类同名核心成员
一旦复写父类核心成员,那么类第一类调用核心成员的时候,就会调用复写后的新核心成员
如果需要采用被复写的父类的核心成员,需要特殊的调用方式:
8.1 表达式的类别注释
为什么需要类别注释
在PyCharm中编写代码,他们经常能够见到如下提示:
自动提示可用方式,因为PyCharm确定这个第一类,是list类别。
同样,他们换一份代码:
定义一个函数func,接收一个参数data
你会发现,PyCharm不会在做出任何提示了
又或者当他们调用方式,进行传参的时候(快捷键ctrl + p弹出提示):
类别注释
Python在3.5版本的时候引入了类别注释,以方便静态类别检查工具,IDE等第三方工具。
类别注释:在代码中涉及统计数据交互的地方,提供统计数据类别的注释(显式的说明)。
主要功能:
帮助第三方IDE工具(如PyCharm)对代码进行类别推断,协助做代码提示帮助开发者自身对表达式进行类别注释支持:
表达式的类别注释函数(方式)形参列表和返回值的类别注释类别注释的语法
为表达式设置类别注释
此基础语法: 表达式: 类别
除了采用 表达式: 类别, 这种语法做注释外,也能在注释中进行类别注释。
语法:
# type: 类别
为表达式设置注释,显示的表达式定义,一般无需注释:
如图,就算不写注释,也明确的知晓表达式的类别
类别注释的限制
类别注释主要功能在于:
帮助第三方IDE工具(如PyCharm)对代码进行类别推断,协助做代码提示帮助开发者自身对表达式进行类别注释(备注)并不会真正的对类别做验证和判断。
也就是,类别注释仅仅是提示性的,不是决定性的
如图代码,是不会报错的哦。
8.2 函数(方式)的类别注释
函数(方式)的类别注释 – 形参注释
如图所示:
在编写函数(方式),采用形参data的时候,工具没有任何提示在调用函数(方式),传入参数的时候,工具无法提示参数类别这些都是因为,他们在定义函数(方式)的时候,没有给形参进行注释
函数和方式的形参类别注释语法:
函数(方式)的类别注释 – 返回值注释
同时,函数(方式)的返回值也是能添加类别注释的。
语法如下:
8.3 Union类别
采用Union[类别, ……, 类别]
能定义联合类别注释
Union联合类别注释,在表达式注释、函数(方式)形参和返回值注释中,均可采用。
九、多态
隐式,指的是:多种状态,即完成某个行为时,采用不同的第一类会得到不同的状态。如何理解?
同样的行为(函数),传入不同的第一类,得到不同的状态。
隐式常作用在承继关系上.
比如
函数(方式)形参声明接收父类第一类实际传入父类的子类第一类进行工作即:
以父类做定义声明以子类做实际工作用以获得同一行为, 不同状态抽象类(接口)
细心的同学可能发现了,父类Animal的speak方式,是空实现
为什么要采用抽象类呢?
提出标准后,不同的厂家各自实现标准的明确要求。
抽象类就好比定义一个标准,
包含了一些抽象的方式,明确要求子类必须实现。
十、综合性事例统计数据分析事例
某公司,有2份统计数据文件,现需要对其进行分析处理,计算每日的销售额并以柱状图表的方式进行展示。
统计数据内容
作为面向第一类的流程员,他们全程将采用面向第一类的思想来进行任务的开发。