运算符重载

来源:互联网 发布:捰体p图软件 编辑:程序博客网 时间:2024/05/16 06:52
#-*-coding:utf-8-*-'''Created on 2015年11月14日@author: Zroad'''"""一、运算符重载的概念:1、类方法中拦截内置的操作2、当类的实例处置内置操作,Python自动调用该方法""""""二、内置操作符与类方法对应关系:__init__   -> 构造函数,X = Class(args)__del__    -> 析构函数,X对象被回收__add__    -> 运算符+,无__iadd__,X+Y,X+=Y__or__     -> 运算符|,X|Y,X |= Y__str__    -> 转换 , str(X)__repr__   -> 打印  , print(X),repr(X)__call__   -> 函数调用 ,X(*args,**kargs)__getattr__ -> 点号运算, X.undefined__setattr__ -> 属性赋值语句,X.any = value__delattr__ -> 属性删除 , del X.any__getattribute__ ->属性获取, X.any__getitem__ -> 索引运算 , X[key],X[i:j]__setitem__ -> 索引赋值,X[key] = value X[i:j] = sequence__delitem__ -> 索引和分片删除  del X[key], del X[i:j]__len__     -> 长度, len(X)__bool__(__nonzero__ py2.6中),  ->bool(X)__lt__,__gl__  ->比较运算符, X < Y, X > Y__le__,__ge__, ->比较运算符,X <= Y,X >= Y__eq__.__ne__, ->比较运算符, X == Y,X != Y__radd__,   -> 右侧加法, Other + X__iadd__,   -> 加强加法,X += Y__contains__,  ->成员关系测试, item in X__index__,  -> 整数值,hex(X),bin(X),oct(X)__new__,    -> 在__init__之前创建对象""""""三、运算符重载实例,索引、分片、自定义迭代器"""#1、重载索引class Indexer(object):    def __getitem__(self,index):        return index ** 2X = Indexer()print ("X[5]=",X[5])  #X[5]= 25#2、属性引用class Empty(object):    def __getattr__(self,attrname):   #访问未定义属性时执行该方法        if attrname == "age":            return 40        else:            raise AttributeError,attrnamee = Empty()print "e.age = ",e.age  #print "e.name = ",e.name    class AccessControl(object):    def __setattr__(self,attrname,value):        if attrname == "age":            self.__dict__[attrname] == value        else:            raise AttributeError,attrname + "not allowed!"a = AccessControl()a.age = 40a.name = "zr"
0 0
原创粉丝点击