Python 高阶语法

前言:

我们通过上篇文章学习了Python的基础语法,接下来我们来学习Python的高阶语法

1.初识对象

在Python中我们可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的

面向对象包含 3 大主要特性:
 封装
 继承
 多态

(内容靠后)

1.1使用对象组织数据

在程序中设计表格 ,我们称之为:设计类(class)

在程序中打印生产表格,我们称之为:创建对象

在程序中填写表格 ,我们称之为:对象属性赋值

2.成员方法

2.1类的定义和使用

的语法:

创建类对象的语法:

2.2成员变量和成员方法

我们可以看出,中:

• 不仅可以定义属性用来记录数据
• 也可以定义函数,用来记录行为

其中:

• 类中定义的属性(变量),我们称之为:成员变量

• 类中定义的行为(函数),我们称之为:成员方法

注意:

定义在类内部的函数 ,我们称之为方法

2.3成员方法的定义语法

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

我们可以看到,在方法定义的参数列表中,有一个: self 关键字

self 关键字是成员方法定义的时候,必须填写的

• 它用来表示类对象自身的意思
• 当我们使用类对象调用方法的时候, self 会自动被 python 传入

注意:

在方法内部,想要访问类的成员变量,必须使用 self

例如:

不过,self 关键字,尽管在参数列表中,但是传参的时候可以忽略它

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

3.类和对象

3.1面向对象编程

类只是一种程序内的"设计图纸",需要基于图纸生产实体(对象),才能正常工作
这种套路,称之为:面向对象编程

3.2语法

基于类创建对象的语法:

3.3在程序中通过类来描述

3.4基于类创建对象

4.构造方法

4.1属性(成员变量)的赋值

这种方法略显繁琐

4.2 init()构造方法

• 构建类时传入的参数会自动提供给 init 方法
• 构建类的时候 init 方法会自动执行

注意:

构造方法也是成员方法,不要忘记在参数列表中提供: self

5.魔术方法

5.1 str 字符串方法

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

我们可以通过**str** 方法,控制类转换为字符串的行为

5.2 lt 小于符号比较方法

直接对 2 个对象进行比较是不可以的

但是在类中实现 lt 方法,即可同时完成:小于符号 和 大于符号 2 种比较

比较大于的魔术方法是:gt

5.3__le__ 小于等于比较符号方法

用法跟上面一样

5.4 eq 比较运算符实现方法

注意:

不实现 eq 方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象 == 比较一定是 False 结果

6. 封装

6.1对用户隐藏的属性和行为

现实世界中的事物,有属性和行为
但是不代表这些属性和行为都是开放给用户使用的

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

6.2私有成员

类中提供了私有成员的形式来支持。
• 私有成员变量
• 私有成员方法

定义私有成员的方式非常简单,只需要:
• 私有成员变量:变量名以 __ 开头( 2 个下划线)
• 私有成员方法:方法名以 __ 开头( 2 个下划线)

6.3使用私有成员

私有方法无法直接被类对象使用

私有变量无法赋值,也无法获取值

私有成员无法被类对象使用,但是可以被其它的成员使用

7.继承

7.1什么是继承?

继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)

代码的实现

并且,继承分为:单继承和多继承

7.2单继承

语法:

操作:

7.3多继承

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

如下:

语法:

操作:

注意:

多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级

即: 先继承的保留,后继承的被覆盖

7.4复写

子类继承父类的成员属性和成员方法后,如果对其"不满意",那么可以进行复写

即:在子类中重新定义同名的属性或方法即可

7.5调用父类同名成员

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

如果需要使用被复写的父类的成员,需要特殊的调用方式

方式1:

• 调用父类成员
使用成员变量:父类名 . 成员变量
使用成员方法:父类名 . 成员方法 (self)

方式 2 :
• 使用 super() 调用父类成员
使用成员变量: super(). 成员变量
使用成员方法: super(). 成员方法 ()

注意:

只能在子类内调用父类的同名成员
子类的类对象直接调用会调用子类复写的成员

相关推荐
charlie11451419138 分钟前
从 0 开始的机器学习——NumPy 线性代数部分
开发语言·人工智能·学习·线性代数·算法·机器学习·numpy
catchadmin1 小时前
Laravel12 + Vue3 的免费可商用商业级管理后台 CatchAdmin V5 正式发布
开发语言·php
袁气满满~_~1 小时前
Python数据分析学习
开发语言·笔记·python·学习
axinawang2 小时前
二、信息系统与安全--考点--浙江省高中信息技术学考(Python)
python·浙江省高中信息技术
寻星探路2 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
程序员小白条2 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
Dxy12393102162 小时前
python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘
开发语言·python·ssl
大王小生2 小时前
C# CancellationToken
开发语言·c#·token·cancellation
listhi5202 小时前
基于C#实现屏幕放大镜功能
开发语言·c#
吨吨不打野2 小时前
CS336——2. PyTorch, resource accounting
人工智能·pytorch·python