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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
Python中无限元素列表的实现方法
Aug 18 Python
初步解析Python中的yield函数的用法
Apr 03 Python
初步解析Python下的多进程编程
Apr 28 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
python实现自动发送报警监控邮件
Jun 21 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
python实现Nao机器人的单目测距
Sep 04 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 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
PHP中的extract的作用分析
2008/04/09 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
php封装的验证码类分享
2017/02/26 PHP
google 搜索框添加关键字实现代码
2010/04/24 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
vue.js实现简单轮播图效果
2017/10/10 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
Python开发的实用计算器完整实例
2017/05/10 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python三大神器之fabric使用教程
2019/06/10 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
装饰资料员岗位职责
2013/12/30 职场文书
保护环境建议书100字
2014/05/13 职场文书
单位实习鉴定评语
2015/01/04 职场文书
婚礼答谢词
2015/01/04 职场文书
单位工作证明范本
2015/06/15 职场文书
家属联谊会致辞
2015/07/31 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript