学习笔记-Python基础-类

这篇博客详细介绍了Python中的类与对象的基础知识,包括类的定义与创建、对象的理解、面向对象编程、属性(类属性与实例属性)、self的作用、继承、多态与封装、定制类、控制属性访问、迭代器和生成器的概念及实现方法。通过实例和代码展示了Python面向对象编程的精髓。

1.理解创建类的基本方法

1.1 类的定义

类(class)是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。

1.2 创建类

在这里插入图片描述
在这里插入图片描述
【例】编写一个程序,用于判断学生是非已经完成作业。如果完成,教师表扬,否则进行批评。
在这里插入图片描述
在这里插入图片描述

2.初步理解对象和面向对象

对象(object):表示客观世界问题空间中的某个具体事物,又表示软件系统解空间中的基本元素。
面向对象程序设计(Object-oriented programming, OOP):是一种程序设计范型,也是一种程序开发的方法。
在这里插入图片描述

3.属性

3.1.1 理解类属性

①类属性,又称静态属性,不会因为创建实例而影响类的属性
②只有通过类才能修改
③实例也拥有类属性,但不能修改类属性
【例】类属性
在这里插入图片描述
实例可以调用类属性
在这里插入图片描述
在类中增加属性,对应的实例会跟着增加属性
在这里插入图片描述
在实例中增加属性,对应的实例类不会跟着增加属性
在这里插入图片描述
在这里插入图片描述

3.1.2 理解实例属性

①实例属性,也是动态属性
②通过实例创建
③不同实例的实例属性值不同
④实例的__ dict__显示当前实例的所有属性
【例】实例属性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【例】实例属性的访问, __ dict__
在这里插入图片描述

3.1.3 理解self的作用

①类中的方法,如无特别规定,都是以self作为第一参数
②self引用当前实例
在这里插入图片描述
在这里插入图片描述
【例】创建类,能够计算任意两个日期之间的天数、周数
安装包 dateutil
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dateutil包的一般使用方法参考:https://www.jianshu.com/p/f29dddce3a9a

4.继承

4.1 理解继承的含义

①继承是对象的特性之一
②继承是面向对象编程的一个重要概念

4.2 继承的实现方法

①父类和子类
②单继承
③多继承:不提倡使用
【例】单继承
在这里插入图片描述
如果子类里面的方法或者属性与父类的方法或者或者属性重名的话,父类的属性或者方法会被覆盖,子类只会拥有自己定义重名的属性或者方法
在这里插入图片描述
重名的话,父类的方法或者属性的继承
在这里插入图片描述
在这里插入图片描述
【例】单继承-学生

在这里插入图片描述
在这里插入图片描述
【例】多继承
在这里插入图片描述
【例】编写“物理学家”类,并将其作为“理论物理学家”和“实验物理学家”两个类的父类
在这里插入图片描述

5.多态与封装

5.1 多态的含义

①多态是对象的特性之一
②Python语言天然具有多态的特性
【例】由于没有对变量的属性进行限制,只要具备+元素的对象都可以作为x和y的变量,比如字符串、列表等,这种现象叫做多态
在这里插入图片描述

5.2 实现封装的方法

①封装是对象的特性之一
②Python中通过私有化的方式实现封装,私有化的方法是名称前面加两个下划线
【例】
在这里插入图片描述
【例】
在这里插入图片描述

6.定制类

6.1 理解类和类型

类就是类型,讨论是什么类型实际是实例化了哪种类
【例】类和类型
在这里插入图片描述
在这里插入图片描述
【例】__ str__ 和__ repr__,str对人友好,repr对解析器友好
在这里插入图片描述

6.2 掌握自定义对象类型的方法

【例】写分数
在这里插入图片描述
在这里插入图片描述
python标准库
在这里插入图片描述
在这里插入图片描述

7.控制属性访问

7.1 优化内存 __ slots__

【例】控制实例的属性
在这里插入图片描述
正常情况下,实例的属性可以随意增加
在这里插入图片描述
但可以通过 __ slots__进行限制
在这里插入图片描述
在这里插入图片描述

7.2 掌握与属性相关的特殊方法

①__ getattr__
②__ setattr__
【例】如果遇到访问对象的属性不存在,可以用__ getattr__
在这里插入图片描述

8.迭代器和生成器

8.1 迭代器

有这个方法的对象都是可迭代的
在这里插入图片描述
【例】迭代器的创建,迭代器还具有__ next__方法
在这里插入图片描述
__ next__方法 让迭代器对象可以读到内存中
在这里插入图片描述
在这里插入图片描述
迭代器对象无法自动返回到初始位置,需要重新加载
在这里插入图片描述
【例】用类的方法定义迭代器
在这里插入图片描述
在这里插入图片描述
【例】斐波那契数列,迭代器对象方便控制内存
在这里插入图片描述
【例】标准库中创建无限个数 -itertools
在这里插入图片描述

8.2 生成器

函数中用yield返回结果,就是生成器对象
在这里插入图片描述
生成器对象也是迭代器对象,也是可迭代的
在这里插入图片描述
在这里插入图片描述
【例】普通函数和生成器函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【例】用生成器写斐波那契数列
在这里插入图片描述
【例】生成器解析
在这里插入图片描述
迭代器和生成器的共同优点都是优化了内存存储,并不是所有的元素都一次性读到内存,而是用多少,生成多少。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值