一篇文章带你搞懂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的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
numpy中的高维数组转置实例
Apr 17 Python
Python Requests库基本用法示例
Aug 20 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
Python面向对象之类和实例用法分析
Jun 08 Python
Python 实现交换矩阵的行示例
Jun 26 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
Python函数__new__及__init__作用及区别解析
Aug 31 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
Python深度学习之Pytorch初步使用
我对PyTorch dataloader里的shuffle=True的理解
Python快速优雅的批量修改Word文档样式
Django migrate报错的解决方案
Django使用channels + websocket打造在线聊天室
教你怎么用python爬取爱奇艺热门电影
Pytorch使用shuffle打乱数据的操作
May 20 #Python
You might like
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
替换python字典中的key值方法
2018/07/06 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python将图片转base64,实现前端显示
2020/01/09 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
给女儿的表扬信
2014/01/18 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
篝火晚会策划方案
2014/05/16 职场文书
贪污检举信范文
2015/03/02 职场文书
求职自我评价范文
2015/03/09 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
辞职离别感言
2015/08/04 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
canvas 中如何实现物体的框选
2022/08/05 Javascript