Python 类的魔法属性用法实例分析
本文实例讲述了Python类的魔法属性用法。分享给大家供大家参考,具体如下:
魔法属性
无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下:
1.doc
表示类的描述信息
classFoo: """描述类信息,这是用于看片的神奇""" deffunc(self): pass print(Foo.__doc__) #输出:类的描述信息
2.module和class
module表示当前操作的对象在那个模块
class表示当前操作的对象的类是什么
test.py
#-*-coding:utf-8-*-
classPerson(object): def__init__(self): self.name='laowang'
main.py
fromtestimportPerson obj=Person() print(obj.__module__)#输出test即:输出模块 print(obj.__class__)#输出test.Person即:输出类
3.init
初始化方法,通过类创建对象时,自动触发执行
classPerson: def__init__(self,name): self.name=name self.age=18 obj=Person('laowang')#自动执行类中的__init__方法
4.del
当对象在内存中被释放时,自动触发执行。
注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。
classFoo: def__del__(self): pass
5.call
对象后面加括号,触发执行。
注:__init__方法的执行是由创建对象触发的,即:对象=类名();而对于call方法的执行是由对象后加括号触发的,即:对象()或者类()()
classFoo: def__init__(self): pass def__call__(self,*args,**kwargs): print('__call__') obj=Foo()#执行__init__ obj()#执行__call__
6.dict
类或对象中的所有属性
类的实例属性属于对象;类中的类属性和方法等属于类,即:
classProvince(object): country='China' def__init__(self,name,count): self.name=name self.count=count deffunc(self,*args,**kwargs): print('func') #获取类的属性,即:类属性、方法、 print(Province.__dict__) #输出:{'__dict__':,'__module__':'__main__','country':'China','__doc__':None,'__weakref__': ,'func': ,'__init__': } obj1=Province('山东',10000) print(obj1.__dict__) #获取对象obj1的属性 #输出:{'count':10000,'name':'山东'} obj2=Province('山西',20000) print(obj2.__dict__) #获取对象obj1的属性 #输出:{'count':20000,'name':'山西'}
7.str
如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值。
classFoo: def__str__(self): return'laowang' obj=Foo() print(obj) #输出:laowang
8、getitem、setitem、delitem
用于索引操作,如字典。以上分别表示获取、设置、删除数据
#-*-coding:utf-8-*- classFoo(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__ delobj['k1']#自动触发执行__delitem__
9、getslice、setslice、delslice
该三个方法用于分片操作,如:列表
#-*-coding:utf-8-*- classFoo(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__ delobj[0:2]#自动触发执行__delslice__
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。