鍍金池/ 教程/ Python/ 六、運(yùn)算符相關(guān)的魔術(shù)方法
二、Enum 的源碼
前言
一、Python 模塊簡(jiǎn)介
一、List(列表)
五、匿名函數(shù)
三、什么是元類
二、循環(huán)語(yǔ)句
二、模塊的使用
三、第一個(gè) Python 程序
線程與進(jìn)程
Python
三、條件語(yǔ)句和循環(huán)語(yǔ)句綜合實(shí)例
四、對(duì)象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運(yùn)算符相關(guān)的魔術(shù)方法
一、枚舉類的使用
前言
一、簡(jiǎn)明概述
二、Python 的基本數(shù)據(jù)類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對(duì)象
一、Python 的 Magic Method
前言
四、生成器
一、面向?qū)ο蟮母拍?/span>
五、類的繼承
二、類
二、使用 <code>type()</code> 動(dòng)態(tài)創(chuàng)建類
進(jìn)程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數(shù)的參數(shù)
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數(shù)傳值問題
二、注釋
一、條件語(yǔ)句
一、Python 語(yǔ)法的簡(jiǎn)要說明
三、函數(shù)返回值
三、基本數(shù)據(jù)類型轉(zhuǎn)換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數(shù)的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡(jiǎn)介
前言
前言
前言
二、構(gòu)造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

六、運(yùn)算符相關(guān)的魔術(shù)方法

運(yùn)算符相關(guān)的魔術(shù)方法實(shí)在太多了,j就大概列舉下面兩類:

1、比較運(yùn)算符

魔術(shù)方法 說明
__cmp__(self, other) 如果該方法返回負(fù)數(shù),說明 self < other; 返回正數(shù),說明 self > other; 返回 0 說明 self == other。強(qiáng)烈不推薦來(lái)定義 __cmp__ , 取而代之, 最好分別定義 __lt__, __eq__ 等方法從而實(shí)現(xiàn)比較功能。 __cmp__ 在 Python3 中被廢棄了。
__eq__(self, other) 定義了比較操作符 == 的行為
__ne__(self, other) 定義了比較操作符 != 的行為
__lt__(self, other) 定義了比較操作符 < 的行為
__gt__(self, other) 定義了比較操作符 > 的行為
__le__(self, other) 定義了比較操作符 <= 的行為
__ge__(self, other) 定義了比較操作符 >= 的行為

來(lái)看個(gè)簡(jiǎn)單的例子就能理解了:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

class Number(object):
    def __init__(self, value):
        self.value = value

    def __eq__(self, other):
        print('__eq__')
        return self.value == other.value

    def __ne__(self, other):
        print('__ne__')
        return self.value != other.value

    def __lt__(self, other):
        print('__lt__')
        return self.value < other.value

    def __gt__(self, other):
        print('__gt__')
        return self.value > other.value

    def __le__(self, other):
        print('__le__')
        return self.value <= other.value

    def __ge__(self, other):
        print('__ge__')
        return self.value >= other.value

if __name__ == '__main__':
    num1 = Number(2)
    num2 = Number(3)
    print('num1 == num2 ? --------> {} \n'.format(num1 == num2))
    print('num1 != num2 ? --------> {} \n'.format(num1 == num2))
    print('num1 < num2 ? --------> {} \n'.format(num1 < num2))
    print('num1 > num2 ? --------> {} \n'.format(num1 > num2))
    print('num1 <= num2 ? --------> {} \n'.format(num1 <= num2))
    print('num1 >= num2 ? --------> {} \n'.format(num1 >= num2))

輸出的結(jié)果為:

__eq__
num1 == num2 ? --------> False 

__eq__
num1 != num2 ? --------> False 

__lt__
num1 < num2 ? --------> True 

__gt__
num1 > num2 ? --------> False 

__le__
num1 <= num2 ? --------> True 

__ge__
num1 >= num2 ? --------> False 

2、算術(shù)運(yùn)算符

魔術(shù)方法 說明
__add__(self, other) 實(shí)現(xiàn)了加號(hào)運(yùn)算
__sub__(self, other) 實(shí)現(xiàn)了減號(hào)運(yùn)算
__mul__(self, other) 實(shí)現(xiàn)了乘法運(yùn)算
__floordiv__(self, other) 實(shí)現(xiàn)了 // 運(yùn)算符
___div__(self, other) 實(shí)現(xiàn)了/運(yùn)算符. 該方法在 Python3 中廢棄. 原因是 Python3 中,division 默認(rèn)就是 true division
__truediv__(self, other) 實(shí)現(xiàn)了 true division. 只有你聲明了 from __future__ import division 該方法才會(huì)生效
__mod__(self, other) 實(shí)現(xiàn)了 % 運(yùn)算符, 取余運(yùn)算
__divmod__(self, other) 實(shí)現(xiàn)了 divmod() 內(nèi)建函數(shù)
__pow__(self, other) 實(shí)現(xiàn)了 ** 操作. N 次方操作
__lshift__(self, other) 實(shí)現(xiàn)了位操作 <<
__rshift__(self, other) 實(shí)現(xiàn)了位操作 >>
__and__(self, other) 實(shí)現(xiàn)了位操作 &
__or__(self, other) 實(shí)現(xiàn)了位操作 |
__xor__(self, other) 實(shí)現(xiàn)了位操作 ^

最后,如果對(duì)本文感興趣的,可以關(guān)注下公眾號(hào):

公眾號(hào)