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();幂运算符"**";