運算子過載是指在方法中攔截內建的操作----
當類的例項出現在內建操作中,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 49 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)
上面我們過載了加法。其他類似。
python中的操作符過載示例
最近在做乙個許可權系統,期望的效果如下 許可權部分是乙個二級結構,contenttype.action 假定對外暴露的介面為 perms 變數,期望能通過 if perms.contentname 來判斷使用者是否擁有contentname中的任一action的許可權,通過 if perms.con...
Python中操作符過載用法分析
類可以過載python的操作符 操作符過載使我們的物件與內建的一樣。x 的名字的方法是特殊的掛鉤 hook python通過這種特殊的命名來攔截操作符,以實現過載。python在計算操作符時會自動呼叫這樣的方法,例如 如果物件繼承了 add 方法,當它出現在 表示式中時會呼叫這個方法。通過過載,使用...
操作符過載
ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...