最近在做乙個許可權系統,期望的效果如下:
許可權部分是乙個二級結構, 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 方法,當它出現在 表示式中時會呼叫這個方法。通過過載,使用...