一篇文章带你搞懂Python类的相关知识


Posted in Python onMay 20, 2021

一、什么是类

类(class),作为代码的父亲,可以说它包裹了很多有趣的函数和方法以及变量,下面我们试着简单创建一个吧。

一篇文章带你搞懂Python类的相关知识

这样就算创建了我们的第一个类了。大家可以看到这里面有一个self,其实它指的就是类aa的实例。每个类中的函数只要你不是类函数或者静态函数你都得加上这个self,当然你也可以用其他的代替这个self,只不过这是python中的写法,就好比Java 中的this。

二、类的方法

1.静态方法,类方法,普通方法

类一般常用有三种方法,即为static method(静态方法),class method(类方法)和self(普通方法)。下面我们来看看他们之间的区别吧。

一篇文章带你搞懂Python类的相关知识

从这里可以看出我们的三种方法有一个共同点,那就是既可以在实例中访问,也可以直接用类访问。不同的是,类实例访问时是不会执行init方法的,也就是没有进行初始化。如果用类直接访问,可以清楚看到它的运行轨迹。如果想在一个方法里调用其他方法则只需:实例名.方法名 或者 类名.方法名 即可。

2.安全方法,私有方法,安全变量,私有变量

安全方法一般是为了保护类的安全性,为了限制访问权限而设立的。一般只需在方法前加单下划线即可,那么私有方法怎么访问呢?和其他方法访问方法一样。

一篇文章带你搞懂Python类的相关知识

安全方法:可以在外部进行调用并且其他方法也能访问到,它允许本身的任何方法进行访问,并可在外部调用,安全属性也是;

私有方法:只能在私有方法内部调用,不能通过类名或者类的实例名来调用,所以你可以在其他方法中通过self.ww来调用或者cls.ww来调用,这样就做到了私有的功能。

三、类的特性

类的特性,相信接触过面向对象的小伙伴应该都知道,封装、继承和多态。

1.封装

讲的就是将一个功能封装到类中,这个很好理解。

2.继承

就是一个类和另一个类的主体结构一致,就好比父亲和儿子的区别,儿子继承父亲所有的特点,这使得他可以少做一些重复劳动,并且他还有自己的一套,这就叫继承,下面我们通过实例说明:

一篇文章带你搞懂Python类的相关知识

可以看出我们实现了继承,就是简单的在子类中添加了父类的名字,并且写了个spuer,用来继承父类的所有的特性。虽然父类的所有东西我们都能继承,但并不是说所有的你都能用的,比如说父类的私有方法或者私有属性:

一篇文章带你搞懂Python类的相关知识

那么如果你想要使用它们那该怎么办呢?很简单,你只需将私有方法或者属性添加到父类某个可以公开访问的类中,然后子类就能使用这些父类定义的私有方法或者属性了。

一篇文章带你搞懂Python类的相关知识

当然,除了单一继承,还有多继承,它可以继承两个类的所有属性和方法,只不过写法与其他编程语言有点不同,它的多继承就是递归继承,不能同时继承,也就是:

一篇文章带你搞懂Python类的相关知识

这样就实现了多继承,多继承可以大大简化代码量。我们可以通过一些魔法方法来获得父类的名称以及说明。

__bases__  #查看类的所有父类
__base__  #查看类的父类
__doc__    #查看类的使用文档,在类中以三引号扩起来的部分都是文档内容

我们注意到,只需继承一个类就实现了多继承,这是因为son类之前继承过father类,所以现在你必须通过son类继承father类,后面给它初始化,如果是两个没有任何关联的类,则需要写两个类名进去,并且初始化。

3.多态

多态的应用使得类更灵活,它可以共享某个方法,给所有的类对象使用。我们来看看:

一篇文章带你搞懂Python类的相关知识

这里是通过对一个函数传一个对象,使得它拥有了类的特征功能,这也就是鸭子类型。

4.动态修改值

当一个类需要大量创建实例时,可以通过魔法方法slots来声明。这样可以减少内存消耗。但是它只是动态的修改,并没有绑定到类的实例中,而且类只能访问slots里设定的值。

一篇文章带你搞懂Python类的相关知识

可以看到访问不了值,因为没有这个属性.

另外,子类的slots为它本身和父类的slots,父类只是本身。这样极大省内存,但是这样好像还不够Python,因为他的局限性,让我决定使用property。property有两种创建方式,我们来看看:

装饰器

直接在方法上运用装饰器,十分方便。他有设置,获取,删除三个属性,例如:

一篇文章带你搞懂Python类的相关知识

可以看到,非常简单就实现了功能,少写了很多代码哦。

在类中定义值为property对象的类属性

使用property函数来实现:

一篇文章带你搞懂Python类的相关知识

可以看到,这样就实现,那么现在我们写一个稍微复杂点的,可以进行交互的动态修改属性吧。

一篇文章带你搞懂Python类的相关知识

一篇文章带你搞懂Python类的相关知识

可以看到,我输入属性名和属性值,如果你想做的更好,可以给它加其他功能,比如私有方法私有属性,访问其他类。总之功能多多,需要你自己动手亲自实践。

四、总结

通过对类的解读,让大家明白了,代码的简洁美观有多重要,为了我们的程序不那么low,请学好类。

到此这篇关于一篇文章带你搞懂Python类的相关知识的文章就介绍到这了,更多相关Python类内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
Python装饰器基础详解
Mar 09 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
CentOS7安装Python3的教程详解
Apr 10 Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
Pytorch使用shuffle打乱数据的操作
May 20 #Python
You might like
基于HTTP长连接的"服务器推"技术的php 简易聊天室
2009/10/31 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
解决Python中回文数和质数的问题
2019/11/24 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
详解python算法常用技巧与内置库
2020/10/17 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
初一新生军训方案
2014/05/22 职场文书
导游词之崇武古城
2019/10/07 职场文书
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL