zoukankan      html  css  js  c++  java
  • Python中的操作符重载

    运算符重载是指在方法中拦截内置的操作----当类的实例出现在内置操作中,Python会自动调用自定义的办法,并且返回自定义方法的操作结果。
     
     
    类可以重载python的操作符
    操作符重载使我们的对象与内置的一样。__X__的名字的方法是特殊的挂钩(hook),python通过这
     
    种特殊的命名来拦截操作符,以实现重载。 python在计算操作符时会自动调用这样的方法,例如:
     
    如果对象继承了__add__方法,当它出现在+表达式中时会调用这个方法。通过重载,用户定义的对
     
    象就像内置的一样。
     
    在类中重载操作符
    1、操作符重载使得类能拦截标准的python操作。
    2、类可以重载所有的python的表达式操作符。
    3、类可以重载对象操作:print,函数调用,限定等。
    4、重载使得类的实例看起来更像内置的。
    5、重载是通过特殊命名的类方法来实现的。
    方法名        重载的操作说明        调用表达式
    __init__    构造函数        创建对象:class()
    __del__        析构函数        释放对象的时候
    __add__        “+”            x + y
    __or__        “|”            x | y
    __repr__    打印,转换        print x, `x`
    __call__    函数调用        X()
    __getattr__    属性引用        x.undefined
    __getitem__    索引            x[key],for循环,in测试
    __setitem__    索引赋值        x[key] = value
    __getslice__    分片            x[low:high]
    __len__        长度            len(x)
    __cmp__        比较            x == Y ,x < y
    __radd__    右边的操作符"+"        非实例 + x
     
    例子:
    __getitem__拦截了所有的索引操作
    >>> class indexer:
    def __getitem__(self,index):
    return index ** 2
    >>> x = indexer()
    >>> for i in range(5):
    print x[i]    #x[i]将调用__getitem__(x,i)
    0
    1
    4
    9
    16
     
     

    python中,我们在定义类的时候,可以通过实现一些函数来实现重载运算符。

    例子如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # -*- coding:utf-8 -*-
    class Test(object):
      def __init__(self, value):
        self.value = value
      def __add__(self, x):
        return self.value *  x.value
    a = Test(3)
    b = Test(4)
    print a + b

    运行结果为:12   a+b等同于a.__add__(b)

    上面我们重载了加法。其他类似。

     
     
  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/5112537.html
Copyright © 2011-2022 走看看