python 反射、md5加密
阿新 • • 發佈:2018-11-10
一、issubclass,type,isinstance
1、issubclass :判斷xx類是否是yyy型別(包括子類),用於類之間的判定
class GrandF: pass class Father(GrandF): pass class Son(Father): pass print(issubclass(Son,Father))#True print(issubclass(Son,GrandF))#True 可以隔代判斷型別,子類屬於父類的父類 print(issubclass(Father,Son))#False 父類不屬於子類
2、type :精確的返回資料型別
# type( ) 精確的返回資料型別 class Foo: pass class Bar(Foo): pass b=Bar() print(type(b))#<class '__main__.Bar'>(返回離自己最親的那個資料型別) print(type(Bar))#<class 'type'>
3、isinstance:也可以判斷xx是yyy型別的資料,但是沒有type那麼精準,可以往上判斷
#isinstance class GrandF: pass class Father(GrandF): passclass Son(Father): pass s=Son() f=Father() g=GrandF() print(isinstance(s,Son))#True 兒子是屬於兒子型別 print(isinstance(s,Father))#True 兒子也屬於父親型別的 print(isinstance(s,GrandF))#True 兒子也屬於爺爺型別的 print(isinstance(g,Father))#False # isinstance 可以判斷物件屬於xx型別,可以網上判斷,不能往下判斷
二、區分函式和方法
1、function:函式
method:方法
2、判斷方法
# 判斷方法還是函式 from types import MethodType,FunctionType ... print(isinstance(xx,MethodType)) #返回True則為方法 print(isinstance(xx,FunctionType)) #返回True則為函式
3、總結
1、類方法:不論什麼情況,都是方法
2、靜態方法:不管什麼時候,都是函式
3、例項方法:如果是例項訪問,則是方法;如果是類名訪問就是函式
三、反射
1、外部檔案如:daniu.py
def chi(): print("⼤⽜⼀頓吃100個螃蟹") def he(): print("⼤⽜⼀頓喝100瓶可樂") def la(): print("⼤⽜不⽤拉") def shui(): print("⼤⽜⼀次睡⼀年")
wife="豬小妹"
2、引入外部檔案 import
import daniu while 1: s=input("輸入你想要測試的功能:") if hasattr(daniu,s):#判斷daniu檔案裡面是否存在s功能 fn=getattr(daniu,s)#如果存在,獲取控制代碼 fn()#執行s功能
3、反射常用的命令
hasattr(物件,屬性(字串)) 檢視物件中是否存在該屬性,如果存在返回True getattr(物件,屬性(字串)) 獲取物件中xxx屬性,並返回 setattr(物件,屬性(字串),值) 1、如果物件中存在該屬性,則直接賦值 2、如果不存在,則新建該屬性,並賦值 delattr(物件,屬性(字串)) 從物件中刪除該屬性
四、md5加密
1、準備點鹽(SALT=b' adfsgghhjh) --------------------(非必需步驟)
2、流程:
import hashlib obj=hashlib.md5(加鹽) obj.update(銘文的,bytes) obj.hexdigest( )獲取密文
3、例項:賬戶登入加密
# 主要應用於密碼的加密 import hashlib # 鹽 SALT=b"ssfSGDF456AGSas" # 製作加密函式 def jiami(connent): obj=hashlib.md5(SALT) #建立md5物件 obj.update(connent.encode("utf-8")) #必須使用bytes型別銘文 return obj.hexdigest() # # 註冊 # username=input("請輸入使用者名稱:") #joinl # passwd=input("請輸入密碼:") #1234567 # passwd=jiami(passwd) # print(passwd) #504510efd4c441addb07d1371442557e uname="joinl" upwd="504510efd4c441addb07d1371442557e" # 登陸 username=input("請輸入使用者名稱:") passwd=input("請輸入密碼:") if uname==username and jiami(passwd)==upwd: print("登陸成功") else: print("登陸失敗")