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将字符串转换成数组的方法
Apr 29 Python
python中list常用操作实例详解
Jun 03 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
使用Python内置的模块与函数进行不同进制的数的转换
Mar 12 Python
如何在python中使用selenium的示例
Dec 26 Python
python2和python3的输入和输出区别介绍
Nov 20 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python创建临时文件和文件夹
Aug 05 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
python pygame 开发五子棋双人对弈
May 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下使用SMTP发邮件的代码
2008/01/10 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
javascript 必知必会之closure
2009/09/21 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
Python File readlines() 使用方法
2018/03/19 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
python从Oracle读取数据生成图表
2020/10/14 Python
啤酒销售实习自我鉴定
2013/09/24 职场文书
智能电子应届生求职信
2013/11/10 职场文书
学生会干部自荐信
2014/02/04 职场文书
班子四风对照检查材料
2014/08/21 职场文书
水电工程师岗位职责
2015/02/13 职场文书
让生命充满爱观后感
2015/06/08 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript