目录

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__

传智播客 魔法属性 学习相关推荐

  1. 传智播客 传智播客.NET视频学习课件

    传智播客 传智播客.NET视频学习课件 访问.NET网站了解更多课程详情 http://net.itcast.cn (小提示:为什么本书中超链接打不开?) 此套课件是伴随传智播客.net实况教学视频 ...

  2. 【传智播客郑州校区分享】在传智播客郑州校区学习倍感幸运

    小李是传智播客郑州校区的一名学员,他大学学的是土木工程,当初报这个专业是觉得毕业后比较好找工作,然而经历四年的学习后才发现很多事情并不是自己想象的那样,但是刚毕业的小李还是不得不去从事与专业相关的工作 ...

  3. 感谢传智播客+C#.Net学习之旅

    <C#.Net基础学习视频2014版>在本月中旬左右终于学习完了,终于学完了.                 自2015年暑期7月份开始学习C#.Net基础学习视频以来,直到本月才学习完 ...

  4. 传智播客免费IT学习资源站-视频库隆重上线

    为优化学员对传智播客官网"视频下载"频道的使用体验,方便学员更及时.便捷.精准地获取高质量.更前沿的教学视频资源,加强自学效果,巩固课堂知识,传智播客将原"视频下载&qu ...

  5. 【传智播客】Libevent学习笔记(三):事件循环

    目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...

  6. 【传智播客】Libevent学习笔记(四):事件event

    目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. ...

  7. 传智播客黑马Java学习笔记_09

    在子类创建对象时,发现父类的构造方法也运行了,为什么呢? 在子类的构造函数中第一行有一个隐式语句super(); class Fu{Fu(){System.out.println("Fu i ...

  8. 【传智播客】Libevent学习笔记(一):简介和安装

    目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 ...

  9. 传智播客黑马Java学习笔记_day08_2

    设计模式:对问题行之有效的解决方式,一种思想,java24种 单例设计模式 解决问题:可以保证一个类的对象在内存中的唯一性 应用场景:多个程序使用同一个配置文件对象,就要保证配置文件的唯一性,配置文件 ...

  10. 传智播客黑马Java学习笔记_day05

    遍历数组 class Demo{public static void main(String args[]){int[] arry=new int[]{87,99,56};for(int x=0;x& ...

最新文章

  1. mysql strcmp s1 s2_MySQL函数基础——字符串函数详解
  2. 【CentOS】EOF使用
  3. xgboost论文公式解析
  4. Qt定时器QBasicTimer、startTimer、QTimer使用总结
  5. word List 24
  6. Win7旗舰版系统0x0000007f蓝屏怎么办
  7. python random库下载_Python---random库(随机数)
  8. 全自动光电整纬机安装和功能分析
  9. Debian - RAID5搭建(热备)
  10. 内存碎片产生原因及解决办法
  11. 软件工程关于教务系统的测试,软件工程课程设计——教务成绩管理系统摘要.doc...
  12. 如何获得哔哩哔哩上下载的教学视频在电脑上看?(bilibili音频视频分离)
  13. 解决:tomcat部署遇到问题:One or more Filters failed to start. Full details will be found in the appro
  14. 抢购茅台,618只能用这种方法
  15. 有哪些好用的在线电影影视导航网站
  16. 计算机应用基础文章 茶的功效,【课程改革论文】茶文化下的计算机应用基础教程课程改革(共5535字)...
  17. 计算机网络第五弹——运输层
  18. java虚拟机原理(java虚拟机的基本结构)
  19. Linux内核模块管理
  20. Mac用Xcode建立TCP和UDP Socket(套接字)编程

热门文章

  1. linux的vim编辑器,强大的Vim 编辑器
  2. C# 自定义网格 dataGridView 三角箭头移动 获取当前行列序号 滚动条显示改变 滚动条定位索引
  3. MyBatis配置使用
  4. axios 同时多个请求_Axios是什么?用在什么场景?如何使用?
  5. python 打印三维数据_Python中的面向对象编程(二):数据隐藏和对象打印
  6. 区分音视频文件的容器格式和编码格式
  7. C++不垃圾,只是Java很傲慢
  8. 经验分享 PDF如何旋转页面,替换页面
  9. 有关Kubernetes监控的4大常见陷阱,注意避免!
  10. [python] 解决OSError: Address already in use