python中的操作符過載示例

2021-09-08 00:11:54 字數 1503 閱讀 7692

最近在做乙個許可權系統,期望的效果如下:

許可權部分是乙個二級結構, contenttype.action

假定對外暴露的介面為 perms 變數,期望能通過 if perms.contentname 來判斷使用者是否擁有contentname中的任一action的許可權,通過 if perms.contentname.actionname來判斷使用者是否具有contentname下的actionname許可權。

為了方便使用者使用,決定使用python的操作符過載。

具體**如下:

class permlookupdict(object):

def__init__(self, datas, content_name):

self.datas = datas

self.content_name = content_name.strip()

def__repr__(self):

return

"datas = %s, and content_name = %s

" %(str(self.datas), self.content_name)

def__getitem__(self, perm_name):

return self.__getattr__(perm_name)

def__getattr__(self, perm_name ):

result = false

try:

perms = self.datas[self.content_name]

if perm_name.strip() in perms:

result = true

else:

result = false

except:

result = false

return result

def__init__(self, datas):

self.datas = datas

def__getitem__(self, content_name ):

return self.__getattr__(content_name)

def__getattr__(self, content_name ):

return permlookupdict(self.datas, content_name)

def__iter__(self):

#i am large, i contain multitudes.

raise typeerror("

")def

__getstate__(self):

return self.__dict__

def__setstate__(self, d):

self.__dict__.update(d)

其中最主要的兩個操作符過載就是 permlookupdict中的__nonzero__和__getattr__, if perms.contentname的最終呼叫函式就是__nonzero__

Python中的操作符過載

運算子過載是指在方法中攔截內建的操作 當類的例項出現在內建操作中,python會自動呼叫自定義的辦法,並且返回自定義方法的操作結果。類可以過載python的操作符 操作符過載使我們的物件與內建的一樣。x 的名字的方法是特殊的掛鉤 hook python通過這 種特殊的命名來攔截操作符,以實現過載。p...

c 過載操作符使用示例

1.overload.h 如下 ifndef overload h define overload h include class overload overload double x,double y overload operator const overload a overload oper...

Python中操作符過載用法分析

類可以過載python的操作符 操作符過載使我們的物件與內建的一樣。x 的名字的方法是特殊的掛鉤 hook python通過這種特殊的命名來攔截操作符,以實現過載。python在計算操作符時會自動呼叫這樣的方法,例如 如果物件繼承了 add 方法,當它出現在 表示式中時會呼叫這個方法。通過過載,使用...