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之永远强大的函数
Sep 14 Python
在Django中创建动态视图的教程
Jul 15 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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检查日期函数checkdate用法实例
2015/03/19 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
PHP引用的调用方法分析
2016/04/25 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
vue实现文件上传功能
2018/08/13 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python文件和目录操作函数小结
2014/07/11 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python使用OpenCV进行标定
2018/05/08 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
化学系大学生自荐信范文
2014/03/01 职场文书
学习党代会心得体会
2014/09/05 职场文书
买房子个人收入证明
2014/10/12 职场文书
总经理助理岗位职责
2015/01/31 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
感恩教师主题班会
2015/08/12 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS