一、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):
pass
class 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("登陆失败")