什么是对象?
- 对象:独立性、功能性、交互性
![226fa4cd42914f370fd0c4b7f1a4748d.png](https://i-blog.csdnimg.cn/blog_migrate/36dc7171844dc1dcfd7c1780663d54c5.png)
- 万物皆对象,均继承于Object类
![29d3df98964d39ef96218daf786caf3d.png](https://i-blog.csdnimg.cn/blog_migrate/a35bfdaccdccd6a93a73a1bc451fce41.png)
- OOP:面向对象编程,本质含义在于复用代码,在较大规模或复杂项目中有用,提高写作产量
![0d1bfb83d4d21531b5a77fad70ad110c.png](https://i-blog.csdnimg.cn/blog_migrate/d07ab23faae549631a1eebf32fb7530c.png)
- 面向对象和面向过程的对比
![c42c933ebd0c7806dadb4f925b2684a5.png](https://i-blog.csdnimg.cn/blog_migrate/d378df9b97b1fe8eec2edd15deba65f8.png)
- 编程实例
![11f46ad78412802fe5bed9b28568994c.png](https://i-blog.csdnimg.cn/blog_migrate/a95ab478a66ff95dda076c94560b0dad.png)
面向过程的程序解决方法:
![dba70e0d7a4ea274f857009685ba92a4.png](https://i-blog.csdnimg.cn/blog_migrate/1b305f2a5772a09c510ed59cf7a944f0.png)
面向对象:
![30ffea1756e3056c6c8b27aee345a3ef.png](https://i-blog.csdnimg.cn/blog_migrate/284a623048c1911ec16baea42fa2720a.png)
- 面向对象的3个特征:封装、继承、多态
- 封装:属性和方法的抽象
![eddcc6f5b7f0909b80ece6c04cb63a99.png](https://i-blog.csdnimg.cn/blog_migrate/0d6e548eb5bfed3e34acbce41db70cce.png)
- 继承:高级复用,几乎完全使用原有类属性与方法
- 多态:针对方法和方法灵活性的抽象;同一个名字的方法可以处理多种数据类型、多个不同参数
![aba8080705faf30b1f581b5f5efcc7b2.png](https://i-blog.csdnimg.cn/blog_migrate/5b7718fea5dd6410452623bd54a03e21.png)
面向对象术语
- 类Class 对象 Object
类是一种抽象,一般不使用类进行运算,通过类来生成对象进行运算。对象在面向对象编程中,相当于程序的变量。实例化就是从类到对象的过程。对象是根据模板【类】生成的实际的功能。
属性:存储数据的变量
方法:操作数据的函数
对象:类对象、实例对象
- 类对象、实例对象
![47fafd415174706495a7f336e685d739.png](https://i-blog.csdnimg.cn/blog_migrate/dc1ecc2ca3aa44d27bc4c6a5e3bdd1cd.png)
- 其他术语
![b392e4cd5f2d06bd0e123d0b2fa2c6e4.png](https://i-blog.csdnimg.cn/blog_migrate/2922d08d0f84b43467183d4be37be9e9.png)
![ba3901b9f9980b895fc952a2efee273d.png](https://i-blog.csdnimg.cn/blog_migrate/d16490319fad7a15c4f9e7ae6c5cac30.png)
面向对象的练习实例
- 如何用Class对象解决该问题?
![11f46ad78412802fe5bed9b28568994c.png](https://i-blog.csdnimg.cn/blog_migrate/a95ab478a66ff95dda076c94560b0dad.png)
class
- OOP更易于理解
类的构建
- 类,class。
![b23bb08fa68f10c4cd06d7a411cc79e8.png](https://i-blog.csdnimg.cn/blog_migrate/67b0c089cc431cc8353f53d034fefa77.png)
类定义不限位置,可以包含在分支或其他丛书语句块中,执行时存在即可
![d3ea27e379d2d029e564fcb4b5e7c838.png](https://i-blog.csdnimg.cn/blog_migrate/4d9d589f2a80620414aecf75c6475044.png)
其中,大写单词组合指首字母大写的组合。<类名>.__doc__访问类描述,doc前面为两个下划线。
![789f9c829a63efed688e0ab8977b3c13.png](https://i-blog.csdnimg.cn/blog_migrate/2c36865326e39161889fa7acd2a1287e.png)
- 类对象:默认在类定义完成后,默认生成类对象
- 实例对象:类最常用的使用方式
![57081833bf4274a500e9b38631bb127c.png](https://i-blog.csdnimg.cn/blog_migrate/516f1a058d01bf76082f4829210f4f57.png)
- 类的构造函数:
1) 用于从类创建实例对象的过程
2)为实例对象提供了参数输入过程
3) 为实例对象的属性定义和赋值提供支持
- 属性和方法是类对外交互的方式,是接口
- 类对象全局只有一个,实例对象可生成多个
- 使用python解释器预定义的__init__()作为构造函数,可以为python对象提供参数。可以接收参数并完成初始操作。其中,self只在类内部使用。
![f3f471afbffce8e8b4aa496d05167e04.png](https://i-blog.csdnimg.cn/blog_migrate/378436e363bce6dd9dd8f79216d31e5f.png)
![dda7907c1c3d713520be4a58826a7ad5.png](https://i-blog.csdnimg.cn/blog_migrate/6828b7980468dc46d327b54d50cd508d.png)
- 类属性:类对象的属性,所有实例对象所共享
- 实例属性:实例对象的属性,由各实例对象所独享
- 访问类属性,不管在类内还是类外,使用<类的名字>.<属性名>访问;访问实例属性,在类内部,使用self.<属性名>访问;在类外部,用<对象名>.<属性名>访问
![95732690cf7c07a725ef52fb4dbe2b24.png](https://i-blog.csdnimg.cn/blog_migrate/e4d7bf2a422bf5dafa10e9d380868c88.png)
类的方法
- 方法是类内部定义的函数
![31daaa09ce8fecaaa1a7d096ed29ae5f.png](https://i-blog.csdnimg.cn/blog_migrate/37af14e1af7472238bf3a2fff517d3a3.jpeg)
- 实例方法:最常用,形式如下,使用<对象名>.<方法名>访问实例方法。实例方法中,第一个参数必须是self
![897231f4332e726d98f05ea9a25a9906.png](https://i-blog.csdnimg.cn/blog_migrate/164aeb9b74583dfb75231da58b538ffd.png)
- demo1:计算某人的幸运数字
![054b3080679d20fb1dad567e85132110.png](https://i-blog.csdnimg.cn/blog_migrate/350fccb07ab48e3c75927ed605ba236c.png)
访问实例属性,在类内部,使用self.<属性名>访问;在类外部,用<对象名>.<属性名>访问。实例方法在类外部访问,采用<对象名>.<方法名>。
'''
- 类方法:与类对象相关的函数,由所有实例对象共享
![91e587b85621c818d1739bc71c90fa1e.png](https://i-blog.csdnimg.cn/blog_migrate/61eb5d4882bf41b288c0953a8bf4be5e.png)
采用<类名>.<方法名>(<参数列表>)或者<对象名>.<方法名>(<参数列表>)方式访问
至少包含一个参数,表示类对象本身,建议用cls
必须包含@classmethod作为装饰器
只能操作类属性和其他类方法,不能操作实例属性和实例方法
- demo2
![b804f1f343353e412dd7df690008c35a.png](https://i-blog.csdnimg.cn/blog_migrate/1823e39cb01dd4a1909a805c2949d5bd.png)
'''
- 自由方法:定义在类命名空间中的普通函数,采用<类名>.<方法>(<参数列表>)方式访问,类名代表着对应的命名空间。
![b24ecdfb97ffbb8f38e33faa50824321.png](https://i-blog.csdnimg.cn/blog_migrate/ab3618b929b840203e30952d00f18fbe.png)
自由方法可以没有参数
只能操作类属性和类方法,不能操作实例属性和实例方法
只能使用<类名>访问
- demo3:
![2120b0171ca8cd12802935ada6e6f8fd.png](https://i-blog.csdnimg.cn/blog_migrate/7af5f63c3c8b9935a80b1b463b20c436.png)
'''
- 静态方法:能够被所有实例对象共享的类中普通函数,仅需要增加装饰器@staticmethod【属于自由方法】
![372fc4665161cb90fa7a77c8dd425a9b.png](https://i-blog.csdnimg.cn/blog_migrate/5aec995573636d98ca6729959fe3802a.png)
可以用<类名/对象名>.<方法>(<参数列表>)
仍然只能操作类属性和其他类方法,不能操作实例属性和实例方法【同样没有引入self参数】
- demo4:
![b580963b4689b7f8f70afeb85c49e037.png](https://i-blog.csdnimg.cn/blog_migrate/c042a7092718ce91d35be6ca4d173fce.png)
'''
- 保留方法:由双下划线开始、结束的方法,保留使用
![814f9759496f05cd3a0d2e15e5cd064a.png](https://i-blog.csdnimg.cn/blog_migrate/f8bf027df1305ca1da34f5c5d16a51b0.png)
![975a8ea80d98caf4e4de2b9f5701cc4e.png](https://i-blog.csdnimg.cn/blog_migrate/0a479e6bd41b09cc9211faccdf3034dc.png)
# 其中,__len__()方法对应len()函数操作可理解为:
学习链接:
Python学习嵩天老师 python面向对象精讲 侵删_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com非常感谢up主分享给大家一起学习,共同进步。