注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一粒浮尘

飘渺虚无

 
 
 

日志

 
 

【转载】Python基础---类  

2014-11-26 09:35:38|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自哥哥《Python基础---类》
一、定义
1、格式:
class 子类名(父类名1,父类名2,...):
   """docstring for this class"""          #类的文档字符串
   def __init__(self[, arg1, arg2, ...]):  #构造函数
       #constructor block;
   def __del__(self):                      #析构函数
       #destructor block;
   def functionName(self[, ......]):       #自定义函数
       '''docstring for this function'''   #函数的文档字符串
       #code block;
   ......
2、self:
每个对象都有一个名为self的内置属性,它指向当前对象本身,类似于C++和Java中的this指针,在声明类的成员函数时,函数的参数列表中最左边的第一个参数就是self,但是在调用时,成员函数的实参不能使用self,这个内置的属性成员由Python的解释器系统使用,自动为对象填充;
3、构造函数:
Python类的构造函数名为__init__,且"init"前后都是双下划线;该函数在创建对象时自动被调用;类似于C++中类的构造函数;
4、析构函数:
Python类的构造函数名为__del__,且"del"前后都是双下划线;该函数在销毁对象时自动被调用;类似于C++中类的析构函数;若想要指明该函数被调用,就要使用del语句来销毁对象;
5、特殊标识符:
以单下划线开头的标识符:代表不能直接访问的类属性,需要通过类提供的接口进行访问,也不能通过语句"from xxx import *"来导入;例如:_foo;
以双下划线开头的标识符:表示该标识符是类的私有成员;例如:__foo;
以双下划线开头和结尾的标识符:表示该标识符是类里特殊方法的专用标识;例如:__init__()是类的构造函数;
二、特殊属性
1、__doc__:
该属性可分别用于类和成员函数中;用于类中时,可以保存类的文档字符串;用于函数时,可以保存函数的文档字符串;
2、__class__:
用于存放当前对象实例所属的类名;
三、特殊方法
Python类中,除了构造函数__init__和析构函数__del__之外,还有下面的一些待实现的特殊方法:
1、基本方法:
__new__(className[,*targs,**kwargs]):静态方法,用于创建类className的实例;它在__init__之前被调用;通常用在设置不变数据类型的子类;
__str__(self):当前对象被字符串化时被调用;内建函数str(self)函数,或print(self)的调用;
__repr__(self):运行时的字符串输出;内建函数repr(self)或操作符"`self`"的调用;
__unicode__(self):Unicode字符串输出;内建函数unicode(self)的被调用;
__len__(self):求出当前对象的长度;内建函数len(self)的调用;
__call__(self,*args):把当前对象当成函数调用,表示可调用的实例;
__nonzero__(self):为当前对象实例定义False值;内建函数bool(self)的调用;
__bool__(self):当前对象的真值测试;内建函数bool(self)的调用;
__dir__(self):列出当前对象的多有属性和方法;内建函数dir(self)的调用;
__format__(self,format_spec):格式化字符串的输出;
2、关系运算符重载:
__cmp__(src,dst):两个对象进行比较;内建函数cmp(src,dst)的调用;
__lt__(self,other):判断对象self是否小于对象other;重载运算符"<"或"lt";
__le__(self,other):判断对象self是否小于等于对象other;重载运算符"<="或"le";
__gt__(self,other):判断对象self是否大于对象other;重载运算符">"或"gt";
__ge__(self,other):判断对象self是否大于等于对象other;重载运算符">="或"ge";
__eq__(self,other):判断对象self是否等于对象other;重载运算符"=="或"eq";
__ne__(self,other):判断对象self是否不等于对象other;重载运算符"!="或"ne";
3、属性操作:
__getattr__(self,attr):获取属性attr;内建函数self.getattr(attr)的调用,仅当属性没找到时才被调用;
__setattr__(self,attr,val):设置属性attr;内建函数self.setattr(self,attr,val)的调用;
__delattr__(self,attr):删除属性attr;内建函数self.delattr(attr)时被调用;
__getattribute__(self,attr):获取属性attr;内建函数self.getattr(attr)的调用,它总是被调用;
__get__(self,attr):获取属性描述符;
__set__(self,attr):设置属性描述符;
__delete__(self,attr):删除属性描述符;
4、算数运算符重载:
__add__(self,obj):加法运算self+obj;
__sub__(self,obj):减法运算self-obj;
__mul__(self,obj):乘法运算self*obj;
__div__(self,obj):除法运算self/obj;
__truediv__(self,obj):True除;除法运算self/obj;
__floordiv__(self,obj):Floor除;除法运算self//obj;
__mod__(self,obj):取模/取余;模运算self%obj;
__divmod__(self,obj):除和取模;内建divmod();
__pow__(self,obj[,mod]):取模/取余;内建pow();幂运算符"**";
__radd__(self,obj):加法运算self+obj;
__rsub__(self,obj):减法运算self-obj;
__rmul__(self,obj):乘法运算self*obj;
__rdiv__(self,obj):除法运算self/obj;
__rtruediv__(self,obj):True除;除法运算self/obj;
__rfloordiv__(self,obj):Floor除;除法运算self//obj;
__rmod__(self,obj):取模/取余;模运算self%obj;
__rdivmod__(self,obj):除和取模;内建divmod();
__rpow__(self,obj[,mod]):取模/取余;内建pow();幂运算符"**";
__iadd__(self,obj):加法运算self+=obj;
__isub__(self,obj):减法运算self-=obj;
__imul__(self,obj):乘法运算self*=obj;
__idiv__(self,obj):除法运算self/=obj;
__itruediv__(self,obj):True除;除法运算self/=obj;
__ifloordiv__(self,obj):Floor除;除法运算self//=obj;
__imod__(self,obj):取模/取余;模运算self%=obj;
__ipow__(self,obj[,mod]):取模/取余;内建pow();幂运算符"**";
5、位操作运算符重载:
__lshift__(self,obj):左移运算符"<<";
__rshift__(self,obj):右移运算符">>";
__and__(self,obj):按位与运算符"&";
__or__(self,obj):按位或运算符"|";
__xor__(self,obj):按位异或运算符"^";
__rlshift__(self,obj):左移运算符"<<";
__rrshift__(self,obj):右移运算符">>";
__rand__(self,obj):按位与运算符"&";
__ror__(self,obj):按位或运算符"|";
__rxor__(self,obj):按位异或运算符"^";
__ilshift__(self,obj):左移运算符"<<=";
__irshift__(self,obj):右移运算符">>=";
__iand__(self,obj):按位与运算符"&=";
__ior__(self,obj):按位或运算符"|=";
__ixor__(self,obj):按位异或运算符"^=";
6、一元运算符重载:
__neg__(self):取负;
__pos__(self):取正;
__abs__(self):取绝对值;内建abs()调用;
__invert__(self):按位取反;操作符"~";
7、类型转换:
__complex__(self,com):转换成complex(复数);内建complex()调用;
__int__(self):转换成int;内建int()调用;
__long__(self):转换成long;内建long()调用;
__float__(self):转换成float;内建float()调用;
__oct__(self):转换成八进制;内建oct()调用;
__hex__(self):转换成十六进制;内建hex()调用;
8、序列类型操作:
__len__(self):序列中的元素数量;
__getitem__(self,ind):对象序列化时依据索引ind得到对应的值;执行"val=obj[idn]"时调用;
__setitem__(self,ind,val):对象序列化时依据索引ind设置对应的值;执行"obj[idn]=val"时调用;
__delitem__(self,ind):对象序列化时依据索引ind删除对应的值;执行"del obj[idn]"时调用;
__getslice__(self,ind1,ind2):对象序列化时依据索引区间,得到对应的序列片段;
__setslice__(self,ind1,ind2):对象序列化时依据索引区间,设置对应的序列片段;
__delslice__(self,ind1,ind2):对象序列化时依据索引区间,删除对应的序列片段;
__contains__(self,val):测试成员val是否在序列中;内建关键字in的调用;
__add__(self,obj):串联操作符"+";
__mul__(self,obj):重复操作符"*";
__iter__(self):创建迭代类;内建函数iter(self)调用;
__reversed__(self):实现序列翻转;内建函数reversed(self)的调用;
9、映射类型操作:
__len__(self):映射中的元素数量;
__hash__(self):散列函数值;
__getitem__(self,key):对象映射化时依据主键key得到对应的值;执行"val=obj[key]"时调用;
__setitem__(self,key,val):对象映射化时依据主键key设置对应的值;执行"obj[key]=val"时调用;
__delitem__(self,key):对象映射化时依据主键key删除对应的值;执行"del obj[key]"时调用;
__missing__(self,key):在字典中不存在给定主键key的value,则提供一个默认值;
  评论这张
 
阅读(235)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017