zoukankan      html  css  js  c++  java
  • Python运算符重载

    运算符重载

    在Python语言中提供了类似于C++的运算符重在功能:
    一下为Python运算符重在调用的方法如下:
    Method        Overloads        Call for
    __init__        构造函数        X=Class()
    __del__        析构函数        对象销毁
    __add__        +                X+Y,X+=Y
    __or__        |                X|Y,X|=Y
    __repr__        打印转换        print X,repr(X)
    __str__        打印转换        print X,str(X)
    __call__        调用函数        X()
    __getattr_    限制            X.undefine
    __setattr__    取值            X.any=value
    __getitem__    索引            X[key],
                                For If
    __len__        长度            len(X)
    __cmp__        比较            X==Y,X<Y
    __lt__        小于            X<Y
    __eq__        等于            X=Y
    __radd__        Right-Side +        +X
    __iadd__        +=                X+=Y
    __iter__        迭代            For In
    __unicode__                   unicode(X)


    迭代重载

    class indexer:
        def __getitem__(self, index): #iter override
            return index ** 2
    X = indexer()
    X[2]
    for i in range(5):
        print X[i]



    减法重载

    class Number:
        def __init__(self, start):
            self.data = start
        def __sub__(self, other): #minus method
            return Number(self.data - other)

    number = Number(20)
    y = number – 10 # invoke __sub__ method


    索引重载

    class stepper:
        def __getitem__(self, i):
            return self.data[i]
       
    X = stepper()
    X.data = 'Spam'
    X[1] #call __getitem__

    for item in X: #call __getitem__
    &nbsp;&nbsp;&nbsp; print item


    getAttr/setAttr重载

    class empty:
        def __getattr__(self,attrname):
            if attrname == 'age':
                return 40
            else:
                raise AttributeError,attrname
    X = empty()
    print X.age #call__getattr__

    class accesscontrol:
        def __setattr__(self, attr, value):
            if attr == 'age':
                # Self.attrname = value
                self.__dict__[attr] = value
            else:
                print attr
                raise AttributeError, attr + 'not allowed'

    X = accesscontrol()
    X.age = 40 #call __setattr__
    X.name = 'wang' #raise exception


    unicode重载

    #coding:utf-8
    class adder:
        def __unicode__(self):
            return u'hello world'

    print unicode(x) #hello world


  • 相关阅读:
    [转] 接触C# 反射 2
    [转] C#操作Excel文件
    【Leetcode】Path Sum II
    java通用抹去魔,在边界行动,擦除补偿
    python抓取网络内容
    一个合格的程序猿编程
    Android的相关的源代码的方法
    随笔
    使用方便git命令检查记录的版本号
    opengl 扳回一球
  • 原文地址:https://www.cnblogs.com/dajianshi/p/2827095.html
Copyright © 2011-2022 走看看