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写一个贪吃蛇游戏实例代码
Aug 21 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
Python中关于浮点数的冷知识
Sep 22 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
Python命令行参数定义及需要注意的地方
Nov 30 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 中的类
2006/10/09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery中removeData()方法用法实例
2014/12/27 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
如何写辞职书
2015/02/26 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
导游词之杭州西湖
2019/09/19 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
详解MySQL的内连接和外连接
2023/05/08 MySQL