decorator python下的修飾器

2021-08-27 05:21:34 字數 1675 閱讀 2409

#定義修飾器函式,傳入需要修飾的函式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修飾。這些修飾符只能修...