#定義修飾器函式,傳入需要修飾的函式func, 重定義修飾的動作
defprintstar
(func):
deff
():#額外的動作
print('******')
return func()
return f
#引用修飾器
@printstar
defadd
():return
1+1@printstar
defsub
():return
2-1print(add())
print(sub())
還可以對修飾器帶引數
#/usr/bin/env python3
#-*- encoding:utf-8 -*-
#decoretor.py
import functools #匯入 functools 模組
defverification
(level):
#是否驗證使用者名稱和密碼 true or false
defdecorator
(func):
#裝飾器 func是要被裝飾的 函式
@functools.wraps(func) #我們可以對func進行裝飾重寫的同時,保持func本身不發生改變
deflogin
(user,pwd,**others):
#針對登入模組 進行判斷使用者和密碼 -- 裝飾開始
"""here's a doc login"""
nstatu = 0
#登入狀態 0:失敗 1:成功
if level:
print('開啟使用者和密碼驗證:')
and pwd =='123456':
print('登入成功!')
nstatu = 1
else:
print('登入失敗!')
nstatu = 0
else:
print('不開啟驗證,直接登入!')
nstatu = 1
print('使用者名稱:',user,',密碼:',pwd)
func(user,pwd,**others) #這裡我們列印最開始func定義的功能,其實執行的就是test_login,這裡是什麼也不輸出(pass)
print('登入過程結束.........decorator is over!') #func結束後,我們裝飾的目的也就結束了
return nstatu #登入判斷 返回一下 登入狀態值
return login #返回這個裝飾效果(登入驗證函式--屬於擴充套件功能)
return decorator #返回裝飾器(包裝函式,這個函式在func執行期間,對其進行了擴充套件)
@verification(false) #注意 verification返回的是乙個裝飾器,這個裝飾器對函式test_login實現功能擴充套件
deftest_login
(user,pwd,**others):
"""here's a doc test_login"""
pass
print("登入狀態:",n)
print(test_login.__name__,',注釋標記:',test_login.__doc__)
複習下修飾符
public 所有人都能訪問。預設 子類訪問,繼承了就能訪問。protected 同包訪問,在乙個包裡就能訪問,別的包繼承了也沒法訪問。除非是工具類,寫個小遊戲什麼的全用這個也沒關係。private 類內部訪問,在同乙個類裡才能訪問,在乙個包裡也沒用。類自己定義了自己用的方法什麼的。以上各自向下相容...
final修飾變數 與Stastic修飾的變數
一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...
可以修飾類的修飾符
外部類只能被public 預設訪問許可權 即default abstract final修飾,不能被private和protect修飾。原因 成員內部類和靜態內部類可以被public 預設訪問許可權 即default private protect abstract final修飾。這些修飾符只能修...