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)

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

     
     
  • 相关阅读:
    JDK介绍
    选择器——过滤选择器——内容过滤器
    选择器——过滤选择器——基本过滤器
    选择器——层次选择器
    选择器——基本选择器
    jQuery 对象转成 DOM 对象
    dom转换成jquery对象
    Android-bindService本地服务-初步-Service返回对象
    Android-bindService本地服务-初步
    Android-Service生命周期
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/5112537.html
Copyright © 2011-2022 走看看