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 zip文件 压缩
Dec 24 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
python文件名和文件路径操作实例
Sep 29 Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
python [:3] 实现提取数组中的数
Nov 27 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
Python实现数字的格式化输出
Aug 01 Python
python raise的基本使用
Sep 10 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python使用递归解决全排列数字示例
2014/02/11 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
历史系毕业生自荐信
2013/10/28 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
大学自我评价
2014/02/12 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
2014年村官工作总结
2014/11/24 职场文书
美丽心灵观后感
2015/06/01 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Python中如何处理常见报错
2022/01/18 Python