传智播客 魔法属性 学习
目录
1. __doc__
2. __module__ 和 __class__
3. __init__
4. __del__
5. __call__
6. __dict__
7. __str__
8、__getitem__、__setitem__、__delitem__
9、__getslice__、__setslice__、__delslice__
无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下:
1. __doc__
- 表示类的描述信息
class Foo:""" 描述类信息,这是用于看片的神奇 """def func(self):passprint(Foo.__doc__)
#输出:类的描述信息
2. __module__ 和 __class__
- __module__ 表示当前操作的对象在那个模块
- __class__ 表示当前操作的对象的类是什么
test.py
# -*- coding:utf-8 -*-class Person(object):def __init__(self):self.name = 'laowang'
main.py
from test import Personobj = Person()
print(obj.__module__) # 输出 test 即:输出模块
print(obj.__class__) # 输出 test.Person 即:输出类
3. __init__
- 初始化方法,通过类创建对象时,自动触发执行
class Person:def __init__(self, name):self.name = nameself.age = 18obj = Person('laowang') # 自动执行类中的 __init__ 方法
4. __del__
- 当对象在内存中被释放时,自动触发执行。
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。
class Foo:def __del__(self):pass
5. __call__
- 对象后面加括号,触发执行。
注:__init__方法的执行是由创建对象触发的,即:对象 = 类名()
;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象()
或者 类()()
class Foo:def __init__(self):passdef __call__(self, *args, **kwargs):print('__call__')obj = Foo() # 执行 __init__
obj() # 执行 __call__
6. __dict__
- 类或对象中的所有属性
类的实例属性属于对象;类中的类属性和方法等属于类,即:
class Province(object):country = 'China'def __init__(self, name, count):self.name = nameself.count = countdef func(self, *args, **kwargs):print('func')# 获取类的属性,即:类属性、方法、
print(Province.__dict__)
# 输出:{'__dict__': <attribute '__dict__' of 'Province' objects>, '__module__': '__main__', 'country': 'China', '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Province' objects>, 'func': <function Province.func at 0x101897950>, '__init__': <function Province.__init__ at 0x1018978c8>}obj1 = Province('山东', 10000)
print(obj1.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 10000, 'name': '山东'}obj2 = Province('山西', 20000)
print(obj2.__dict__)
# 获取 对象obj1 的属性
# 输出:{'count': 20000, 'name': '山西'}
7. __str__
- 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
class Foo:def __str__(self):return 'laowang'obj = Foo()
print(obj)
# 输出:laowang
8、__getitem__、__setitem__、__delitem__
- 用于索引操作,如字典。以上分别表示获取、设置、删除数据
# -*- coding:utf-8 -*-class Foo(object):def __getitem__(self, key):print('__getitem__', key)def __setitem__(self, key, value):print('__setitem__', key, value)def __delitem__(self, key):print('__delitem__', key)obj = Foo()result = obj['k1'] # 自动触发执行 __getitem__
obj['k2'] = 'laowang' # 自动触发执行 __setitem__
del obj['k1'] # 自动触发执行 __delitem__
9、__getslice__、__setslice__、__delslice__
- 该三个方法用于分片操作,如:列表
# -*- coding:utf-8 -*-class Foo(object):def __getslice__(self, i, j):print('__getslice__', i, j)def __setslice__(self, i, j, sequence):print('__setslice__', i, j)def __delslice__(self, i, j):print('__delslice__', i, j)obj = Foo()obj[-1:1] # 自动触发执行 __getslice__
obj[0:1] = [11,22,33,44] # 自动触发执行 __setslice__
del obj[0:2] # 自动触发执行 __delslice__
传智播客 魔法属性 学习相关推荐
- 传智播客 传智播客.NET视频学习课件
传智播客 传智播客.NET视频学习课件 访问.NET网站了解更多课程详情 http://net.itcast.cn (小提示:为什么本书中超链接打不开?) 此套课件是伴随传智播客.net实况教学视频 ...
- 【传智播客郑州校区分享】在传智播客郑州校区学习倍感幸运
小李是传智播客郑州校区的一名学员,他大学学的是土木工程,当初报这个专业是觉得毕业后比较好找工作,然而经历四年的学习后才发现很多事情并不是自己想象的那样,但是刚毕业的小李还是不得不去从事与专业相关的工作 ...
- 感谢传智播客+C#.Net学习之旅
<C#.Net基础学习视频2014版>在本月中旬左右终于学习完了,终于学完了. 自2015年暑期7月份开始学习C#.Net基础学习视频以来,直到本月才学习完 ...
- 传智播客免费IT学习资源站-视频库隆重上线
为优化学员对传智播客官网"视频下载"频道的使用体验,方便学员更及时.便捷.精准地获取高质量.更前沿的教学视频资源,加强自学效果,巩固课堂知识,传智播客将原"视频下载&qu ...
- 【传智播客】Libevent学习笔记(三):事件循环
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...
- 【传智播客】Libevent学习笔记(四):事件event
目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...
- 传智播客黑马Java学习笔记_09
在子类创建对象时,发现父类的构造方法也运行了,为什么呢? 在子类的构造函数中第一行有一个隐式语句super(); class Fu{Fu(){System.out.println("Fu i ...
- 【传智播客】Libevent学习笔记(一):简介和安装
目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...
- 传智播客黑马Java学习笔记_day08_2
设计模式:对问题行之有效的解决方式,一种思想,java24种 单例设计模式 解决问题:可以保证一个类的对象在内存中的唯一性 应用场景:多个程序使用同一个配置文件对象,就要保证配置文件的唯一性,配置文件 ...
- 传智播客黑马Java学习笔记_day05
遍历数组 class Demo{public static void main(String args[]){int[] arry=new int[]{87,99,56};for(int x=0;x& ...
最新文章
- mysql strcmp s1 s2_MySQL函数基础——字符串函数详解
- 【CentOS】EOF使用
- xgboost论文公式解析
- Qt定时器QBasicTimer、startTimer、QTimer使用总结
- word List 24
- Win7旗舰版系统0x0000007f蓝屏怎么办
- python random库下载_Python---random库(随机数)
- 全自动光电整纬机安装和功能分析
- Debian - RAID5搭建(热备)
- 内存碎片产生原因及解决办法
- 软件工程关于教务系统的测试,软件工程课程设计——教务成绩管理系统摘要.doc...
- 如何获得哔哩哔哩上下载的教学视频在电脑上看?(bilibili音频视频分离)
- 解决:tomcat部署遇到问题:One or more Filters failed to start. Full details will be found in the appro
- 抢购茅台,618只能用这种方法
- 有哪些好用的在线电影影视导航网站
- 计算机应用基础文章 茶的功效,【课程改革论文】茶文化下的计算机应用基础教程课程改革(共5535字)...
- 计算机网络第五弹——运输层
- java虚拟机原理(java虚拟机的基本结构)
- Linux内核模块管理
- Mac用Xcode建立TCP和UDP Socket(套接字)编程
热门文章
- linux的vim编辑器,强大的Vim 编辑器
- C# 自定义网格 dataGridView 三角箭头移动 获取当前行列序号 滚动条显示改变 滚动条定位索引
- MyBatis配置使用
- axios 同时多个请求_Axios是什么?用在什么场景?如何使用?
- python 打印三维数据_Python中的面向对象编程(二):数据隐藏和对象打印
- 区分音视频文件的容器格式和编码格式
- C++不垃圾,只是Java很傲慢
- 经验分享 PDF如何旋转页面,替换页面
- 有关Kubernetes监控的4大常见陷阱,注意避免!
- [python] 解决OSError: Address already in use