Python 类的魔法属性用法实例分析


Posted in Python onNovember 21, 2019

本文实例讲述了Python 类的魔法属性用法。分享给大家供大家参考,具体如下:

魔法属性

无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下:

1. doc

表示类的描述信息

class Foo:
  """ 描述类信息,这是用于看片的神奇 """
  def func(self):
    pass
print(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 Person
obj = Person()
print(obj.__module__) # 输出 test 即:输出模块
print(obj.__class__) # 输出 test.Person 即:输出类

3. init

初始化方法,通过类创建对象时,自动触发执行

class Person:
  def __init__(self, name):
    self.name = name
    self.age = 18
obj = Person('laowang') # 自动执行类中的 __init__ 方法

4. del

当对象在内存中被释放时,自动触发执行。

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。

class Foo:
  def __del__(self):
    pass

5. call

对象后面加括号,触发执行。

注:__init__方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 call 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
  def __init__(self):
    pass
  def __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 = name
    self.count = count
  def 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__

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
用Python解析XML的几种常见方法的介绍
Apr 09 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
自己使用总结Python程序代码片段
Jun 02 Python
python 调用win32pai 操作cmd的方法
May 28 Python
python实现二叉树的遍历
Dec 11 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
python 多个参数不为空校验方法
Feb 14 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
Python更新所有已安装包的操作
Feb 13 Python
Python接口测试文件上传实例解析
May 22 Python
python画蝴蝶曲线图的实例
Nov 21 #Python
Python 静态方法和类方法实例分析
Nov 21 #Python
Python 用turtle实现用正方形画圆的例子
Nov 21 #Python
python 实现兔子生兔子示例
Nov 21 #Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 #Python
用python中的matplotlib绘制方程图像代码
Nov 21 #Python
python hash每次调用结果不同的原因
Nov 21 #Python
You might like
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
PHP 开发环境配置(Zend Studio)
2010/04/28 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
jquery attr方法获取input的checked属性问题
2014/05/26 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
js制作简单的音乐播放器的示例代码
2017/08/28 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
Python学习入门之区块链详解
2017/07/25 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python3.6数独问题的解决
2019/01/21 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
经济学人订阅:The Economist
2018/07/19 全球购物
班组长竞聘书
2014/03/31 职场文书
校长师德表现自我评价
2015/03/04 职场文书
单位推荐信范文
2015/03/27 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
给numpy.array增加维度的超简单方法
2021/06/02 Python