python 面向对象篇
文章目录
- 面向对象的基础知识
- 类的实例化
- 实例属性
- 类属性
- 类的操作(调用方法和属性)
- 实例方法
- 构造方法
- 析构方法
- self参数的作用
- 类方法
- 面向对象的三大特性
- 继承:
- 多态:来源于继承,一个事务具备多个形态
- 扩展:多态性,不同的对象可以使用相同的函数名
面向对象的基础知识
opo:object oriented programming 面向对象的程序设计,一种程序设计理念,核心对象 类+对象
类:类是对一组具有相同属性和行为的对象的抽象
对象:对象指的是一个具体的实体,不用于指代一个抽象的群体,类的实例化,具体的类的体现
属性:
类属性:类属性是隶属于类的属性,用于描述类的特征
实例属性:实例属性是隶属于具体对象的属性,用于描述具体的对象
私有属性:
定义:属性名称前加上前缀 __,表示该属性为私有属性
只能在类的实例方法中访问私有属性,不允许在类的外部访问私有属性
例:
class Person:def __init__(self, name):self.__name = nametom = Person('tom') print(tom.__name)-----------------------------------Traceback (most recent call last):File "attr-get.py", line 6, in <module>print(tom.__name) AttributeError: 'Person' object has no attribute '__name'
在第 1 行,定义了类 Person
在第 3 行,创建私有属性 __name
在第 5 行,创建一个实例 tom
在第 6 行,直接访问实例的属性 __name
程序运行报错:‘Person’ object has no attribute ‘__name’,表示无法找到属性 __name’。因此,在类 Person 的外部无法直接读取实例的私有属性。
类的实例化
实例属性
定义:实例属性是隶属于具体对象的属性,用于描述具体的对象
class Person:passzhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
print('name = %s, age = %d' % (zhou.name, zhou.age))liu = Person()
liu.name = 'Liu'
liu.age = 53
print('name = %s, age = %d' % (liu.name, liu.age))
在第 1 行,定义了类 Person
在第 4 行,使用类 Person 创建一个对象 zhou
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
- 在第 7 行,打印对象 zhou 的属性 name 和 age
在第 9 行,使用类 Person 创建一个对象 liu
- 在第 10 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 11 行,设置对象 liu 的属性 age,该属性为实例属性
- 在第 12 行,打印对象 liu 的属性 name 和 age
类属性
定义:类属性是隶属于类的属性,用于描述类的特征
在 Python 中,类属性在类中的定义如下所示:
class 类名:类属性 = 值
示例代码如下:
class Person:count = 0zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)liu = Person()
liu.name = 'Liu'
liu.age = 53
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)
在第 1 行,定义了类 Person
在第 2 行,定义了类 Person 的属性 count,该属性是类属性,描述了 Person 对象的数量
在第 4 行,使用类 Person 创建一个对象 zhou
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
因为新创建了一个对象 zhou
- 在第 7 行,访问 Person 的类属性 count,对其增加 1
- 在第 8 行,打印 Person 的类属性 count
在第 10 行,使用类 Person 创建一个对象 liu
- 在第 11 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 12 行,设置对象 liu 的属性 age,该属性为实例属性
因为新创建了一个对象 liu
- 在第 13 行,访问 Person 的类属性 count,对其增加 1
- 在第 14 行,打印 Person 的类属性 count
程序运行输出如下:
Person.count = 1
Person.count = 2
类的操作(调用方法和属性)
实例方法
定义:实例方法是用于访问对象实例属性的方法
class 类:def 实例方法(self):self.属性
实例方法定义在类中,它的第一个参数 self 指向调用该方法的对象,在实例方法中通过 “self.属性” 访问对象的实例属性。
例:每个人具有 name 和 age 的属性,创建一个类 Person,在类 Person 中定义实例方法 introduce 访问对象的属性,代码示例如下:
class Person:def introduce(self):print('name = %s, age = %d' % (self.name, self.age))tom = Person()
tom.name = 'tom'
tom.age = 10
tom.introduce()jerry = Person()
jerry.name = 'jerry'
jerry.age = 20
jerry.introduce()
- 在第 1 行,定义了类 Person
在第 2 行,定义了类 Person 的方法 introduce,introduce 的 self 参数指向调用 introduce 方法的对象
在第 3 行,introduce 方法通过 self.name 和 self.age 访问对象的属性
在第 5 行,使用类 Person 创建一个对象 tom
在第 6 行,设置对象 tom 的属性 name,该属性为实例属性
在第 7 行,设置对象 tom 的属性 age,该属性为实例属性
在第 8 行,调用对象 tom 的方法 introduce,对象 tom 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 tom
在第 10 行,使用类 Person 创建一个对象 jerry
在第 11 行,设置对象 jerry 的属性 name,该属性为实例属性
在第 12 行,设置对象 jerry 的属性 age,该属性为实例属性
在第 13 行,调用对象 jerry 的方法 introduce,对象 jerry 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 jerry
程序运行结果:
name = tom, age = 10
name = jerry, age = 20
构造方法
语法:
class 类:def __init__(self, 参数):self.属性 = 参数对象 = 类(参数)
- 方法名的前缀和后缀是两个下划线 _
- 方法的第一个参数 self 指向新创建的对象
- 方法的其余参数用于设定对象的属性
例子:每个人具有 name 和 age 的属性,创建一个类 Person,在类 Person 中定义构造方法 init,创建对象时设定对象的属性,代码示例如下:
class Person:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):print('name = %s, age = %d' % (self.name, self.age))tom = Person('tom', 10)
tom.introduce()jerry = Person('jerry', 20)
jerry.introduce()
- 在第 1 行,定义了类 Person
- 在第 2 行,定义了类 Person 的构造方法 init
- init 的 self 参数指向新创建的对象
- 在第 3 行和第 4 行,初始化对象的 name 和 age
- 在第 6 行,定义了类 Person 的实例方法 introduce
- introduce 的 self 参数指向调用 introduce 方法的对象
- 在第 7 行,输出对象的 name 和 age
- 在第 9 行,使用类 Person 创建一个对象 tom
- 新创建对象 tom 时,tom 的属性 name 和 age 为空
- 将对象 tom 作为参数传递给类 Person 的构造方法 init
- 在构造方法 init** 设置属性 name 和 age
- 在第 12 行,使用类 Person 创建一个对象 jerry
- 新创建对象 jerry 时,jerry 的属性 name 和 age 为空
- 将对象 jerry 作为参数传递给类 Person 的构造方法 init
- 在构造方法 init** 设置属性 name 和 age 程序运行输出如下:
name = tom, age = 10
name = jerry, age = 20
析构方法
定义:Python 提供了一种机制使得对象被删除前能够得到通知。对象被删除时,如果该对象拥有名为 del 的方法,该方法在删除前被调用,该方法又被称为析构方法
语法:
class 类:def __del__(self):self.属性
- 方法名的前缀和后缀是两个下划线 _
- 方法的参数 self 指向将被删除的对象
例:
创建一个类 Person,并定义析构方法 del,然后使用类 Person 创建两个对象,最后再使用 del 语句删除他们,验证析构方法,代码示例如下:
class Person:def __init__(self, name, age):self.name = nameself.age = agedef __del__(self):print('del %s' % self.name)def introduce(self):print('name = %s, age = %d' % (self.name, self.age))tom = Person('tom', 10)
tom.introduce()jerry = Person('jerry', 20)
jerry.introduce()del tom
del jerry
- 在第 1 行,定义了类 Person
- 在第 2 行,定义了构造方法 init
- 在第 6 行,定义了析构方法 del
- 在第 9 行,定义了实例方法 introduce
- 在第 12 行,使用类 Person 创建一个对象 tom
- 在第 13 行,使用类 Person 创建一个对象 jerry
- 在第 18 行,使用 del 语句删除对象 tom,调用析构方法 tom.del()
- 在第 19 行,使用 del 语句删除对象 jerry,调用析构方法 jerry.del() 程序运行输出如下:
name = tom, age = 10
name = jerry, age = 20
del tom
del jerry
self参数的作用
- self 出现在方法上:表示内置方法,自定义方法
def cat(self):
- self出现在类属性中:调用类属性
print(f'这是一只猫!,我叫{self.name}')
- self出现在类中的方法中:调用类中其他方法
def run(self):
self.cat()
- self:类自己,只能使用在类的内部
类方法
普通方法:self必须参数类方法:classmethod,必须参数:cls静态方法:staticmethod 没有必须参数
面向对象的三大特性
封装:
开放接口,隐藏实现 ,python中封装很普遍,数据的封装:列表 ,字典,元组,集合;接口封装-方法【内置函数,外部函数】
继承:
定义:
在面向对象的程序设计中,定义一个新的 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类,而被继承的 class 称为基类、父类或超类。
语法:
class Parent:passclass Child(Parent):pass
多态:来源于继承,一个事务具备多个形态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HiE7nImu-1655351962755)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fefe6750418a41af809f9ee9cbd15189~tplv-k3u1fbpfcp-watermark.image?)]
扩展:多态性,不同的对象可以使用相同的函数名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eugCUxR4-1655351962757)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/388b976a6c9e438a83588c7673a81cbb~tplv-k3u1fbpfcp-watermark.image?)]
python 面向对象篇相关推荐
- Python面向对象篇(2)-继承
在发表本篇随笔的时候,距离上一次发已经有一个多月了,很多朋友私信我为什么不持续更新了,在这里先跟大家说声抱歉.因为年底的工作较为繁重,实在分不出精力,更重要的也是在思考后面进阶的部分要按怎样的顺序写, ...
- python——面向对象篇之异常和反射
内置函数isinstance和issubclass 1.1 isinstance用法: 1 isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: 1 print ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个" ...
- python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]
python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...
- 跟着王进老师学开发Python篇第五季:面向对象篇-王进-专题视频课程
跟着王进老师学开发Python篇第五季:面向对象篇-422人已学习 课程介绍 课程从0开始,讲到人工智能:按阶段授课,从入门到跑路: 适合无基础的小白,也适合定制,需要哪个模块学哪个模 ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结
前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...
- 什么是python-了解什么是Python面向对象(1)
今天马哥教育要跟大家分享的文章是了解什么是Python面向对象(1)?相信大家见过很多的Python公众号上有面向对象的文章,点击却是帅哥或者美女的简介,大家是不是被搞糊涂了呢?面向对象在Python ...
- python编程基础是什么-Python面向对象编程基础解析(一)
1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...
最新文章
- 使用cat,awk和sort命令从nginx访问日志中统计user-agent类型
- 数据库开发基本操作-关于sql server 2005 未开放1433端口的问题
- vba 窗体单选框怎么传回sub_VBA之EXCEL应用
- Harris算子的运用 用于图像配准
- C++ vector 容器浅析
- 使用树莓派搭建WordPress个人博客
- 树和二叉树的基本概念(二级)
- C#学习笔记——25个经典问题
- 创建二叉树的代码_解二叉树的右视图的两种方式
- 创建表结构相同的表,表结构相同的表之间复制数据,Oracle 中 insert into XXX select from 的用法...
- 英伟达新开源GPU加速平台:主打数据科学和机器学习,50倍于CPU
- 常见的javascript日期和时间戳互相转化
- C#类的定义与对象使用
- 小米路由器刷梅林教程_小米路由器3刷X-Wrt固件教程
- qdialog修改标题栏图标_qt – 如何在QDockWidget标题栏中显示图标?
- 主播入门到精通培训实操手册全套资料(共300份)
- 7个等级 容灾等级_容灾的等级
- java getbytes 不一样_(透彻)java String.getBytes()编码问题
- php 在服务器运行不起,PHP Cookies在localhost上运行良好,但在实时服务器上不起作用...
- 转载|领英开源TonY:构建在Hadoop YARN上的TensorFlow框架
热门文章
- 序列化:Protobuf 与 JSON、XML 的对比
- 酒店管理者必备的九大管理知识
- 【IDEA】配置翻译插件【Translate】
- 485与计算机连接,RS422与RS485的连接方法
- 人不是被事物本身困扰是什么理论_心理学:人不是被事情本身所困扰,而是被其对事情的看法所困扰!...
- 15.7.1压缩文件
- Android第一节(体系介绍),维维复习
- 方差代价函数到梯度下降函数
- 基于android记事本毕业论文,基于Android的记事本应用的设计与实现-毕业论文.doc...
- 华为HG8245C光猫设置VOIP