day17 isinstance type issubclass 反射
1. issubclass,type,isinstance
1.issubclass 判断xxx是否yyy的子类
例:
class Foo:
pass
class Bar(Foo):
pass
class Base(Bar):
pass
print(issbuclass(Bar,Foo)) #TRUE
print(issubclass(Base,Foo)) #TRUE 可以进行隔代判断
print(issubclass(Foo,Bar)) #FALSE
print(issubclass(Foo, object)) #TRUE
print(issubclass(Bar, object)) #TRUE
print(issubclass(BASE, object)) #TRUE object是所有类的根,是面向 对象的祖宗 from collections import Iterator
lst = []
it = lst.__iter__() # list_iterator
print(isinstance(it, Iterator)) # True
2.type 帮我们判断xx数据是xxx书库类型的
例:在计算时候判断数据类型是否可以进行计算
def cul(a,b): #传入两个数a和b,计算他们的和
if(type(a)==int or type(a)==float) and (type(b)==int or type(b)==float):
return a +b
else:
return "笨蛋,文字和数字分不清"
3.isinstance 也是判断xx数据是yyy类型的,但是没有type那么精准
class Base:
pass
class Foo(Base):
pass
class Bar(Foo):
pass
print(isinstance(Foo(), Foo)) # True
print(isinstance(Foo(), Base)) # True
print(isinstance(Foo(), Bar)) # False
注:isinstance可以判断xx是xx家族体系的,但是只能往上(父类)判断,不能往下判断(子类)
2. 判断函数还是方法
例
class Foo:
def chi(self):
print("我是吃")
@staticmethod
def static_method():
pass
@classmethod
def class_method(cls):
pass
f = Foo()
print(f.chi) # <bound method Foo.chi of <__main__.Foo object at0x10f688550>>
print(Foo.chi) # <function Foo.chi at 0x10e24a488> print(Foo.static_method) # <function Foo.static_method at 0x10b5fe620>
print(f.static_method) # <function Foo.static_method at 0x10e1c0620> print(Foo.class_method) # bound method Foo.class_method of <class'__main__.Foo'>>
print(f.class_method) #<bound method Foo.class_method of <class'__main__.Foo'>>
结论:
1.实例函数
1.用类名访问是函数
2.用对象访问是方法
2.静态方法
1.不管是用对象访问还是类名访问,都是函数
3.类方法
1.不管用对象访问还是类名访问,都是方法 如何用程序判断是函数还是方法
from types import FunctionType,MethodType
def func():
pass
print(isinstance(func, FunctionType)) # True
print(isinstance(func, MethodType)) # False
class Foo:
def chi(self):
print("我是吃")
@staticmethod
def static_method():
pass
@classmethod
def class_method(cls):
pass
obj = Foo()
print(type(obj.chi)) # method
print(type(Foo.chi)) # function
print(isinstance(obj.chi, MethodType)) # True
print(isinstance(Foo.chi, FunctionType)) # True
print(isinstance(Foo.static_method, FunctionType)) # True
print(isinstance(Foo.static_method, MethodType)) # False
print(isinstance(Foo.class_method, FunctionType)) # False
print(isinstance(Foo.class_method, MethodType)) # True
3. 反射:手动输入要运行的功能. 反着去模块里找. 这个就叫反射
例 :
impor master #导入模块
from types import FunctionType #导入函数模块
while 1:
gongneng=input("请输入你要测试的功能")
if hasattr(master,gongneng): #判断是否存在这个功能
fn=getattr(master,gongneng) #获取这个功能
if isinstance(fn,FunctionType) 判断是否函数
fn() #是函数就运行运行这个功能
else: #不是就打印
print("fn")
class Car:
def __init__(self,color,pai,price):
self.color=color
self.pai=pai
self.price=price
def fly(self):
print("我的车会飞")
c=Car("红色","京34234",1111)
c.fly() #我的车会飞
# delattr(Car,"fly")
# c.fly() #'Car' object has no attribute 'fly'
# #方法被删掉了删除 删除方法只能通过类名
setattr(Car,"fly",lambda self:print("我的天,我的车可以打飞机"))
c.fly() #我的天,我的车可以打飞机 # print(c.color) #红色
# setattr(c,"color","黄色")
# print(c.color) #黄色 设置成了黄色,要设置属性只能去找对象 getattr(模块,字符串) 从对象中获取XX功能
可以从模块中获取功能,也可以从对象获取功能
因为在python中,一切皆为对象
hasattr()用来判断xxx中是否包含了xxx功能
setattr(obj, str, value) 把obj中的str成员设置成value. 注意. 这里的value可以是
值, 也可以是函数或者算法
delattr(obj, str) 把obj中的str成员删除掉
这几个操作都是在内存里面进行的,并不会影响你的源代码
简写:
hasattr(对象, 属性(字符串))
getattr(对象, 属性(字符串)) 从对象中获取到xxx属性 setattr(对象, 属性, 值)
delattr(对象, 属性) 从对象中删除xxx属性
4.MD5加密 不可逆加密
import hashlib
obj = hashlib.md5(加盐)
obj.update(铭文的bytes)
obj.hexdigest() 获取密文 例
import hashlib
SALT = b"abcdefghijklmnjklsfdafjklsdjfklsjdak"
def jiami(content):
obj = hashlib.md5(SALT)
obj.update(content.encode("utf-8"))
return obj.hexdigest() 注册
username = input("请输入你的用户名:")
password = input("请输入你的密码:")
password = jiami(password) 登录
username = input("请输入你的用户名:")
password = input("请输入你的密码:") if uname == username and upwd == jiami(password):
print("登录成功")
else:
print("失败")
day17 isinstance type issubclass 反射的更多相关文章
- python基础之 反射,md5加密 以及isinstance, type, issubclass内置方法的运用
内容梗概: 1. isinstance, type, issubclass 2. 区分函数和方法 3. 反射(重点) 4. md5加密 1. isinstance, type, issubclass1 ...
- isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)
6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...
- python 全栈开发,Day23(复习,isinstance和issubclass,反射)
一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...
- python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射
多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...
- isinstance与issubclass,反射
目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...
- isinstance, type, issubclass
isinstance: 判断你给对象是否是xx类型的. (向上判断)type: 返回xxx对象的数据类型issubclass: 判断xxx类是否xxx的子类 class Animal: def eat ...
- day23-1 isinstance、issubclass和反射
目录 isinstance和issubclass 反射(hasattr,getattr,setattr,delattr) isinstance和issubclass isinstance(obj,cl ...
- 绑定与非绑定方法及反射,isinstance和issubclass内置函数
目录 绑定方法与非绑定方法 1.绑定方法 2.非绑定方法(staticmethod) isinstance和issubclass 内置函数 1.isinstance 2.issubclass 反射(面 ...
- python基础(28):isinstance、issubclass、type、反射
1. isinstance和issubclass 1.1 isinstance isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pa ...
随机推荐
- od命令 查看二进制文件
od命令用于输出文件的八进制.十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符. 以数值进制格式输出:od [选项] 文件 od -d 文件 --十进制输 ...
- Entity Framework Tutorial Basics(27):Update Entity Graph
Update Entity Graph using DbContext: Updating an entity graph in disconnected scenario is a complex ...
- 深、浅copy
深.浅copy多用于列表 浅copy:第一层中不变的数据是独立的,可变类型元素指向同一块内存地址 l1 = [1,2,3,["a","b"]] l2 = l1. ...
- 前端(HTML/CSS/JS)-CSS编码规范
1. 文件名规范 文件名建议用小写字母加中横线的方式.为什么呢?因为这样可读性比较强,看起来比较清爽 https://stackoverflow.com/questions/25704650/disa ...
- form的提交方式
1,最普通最常用的方法就是用submit type.. <form name=”form” method=”post” action=”#"> <input type=”s ...
- mysql--表数据的操作
插入数据 --测试插入数据 INSERT 表名 VALUES|VALUE(值...)--当没有指定插入顺序的时候按照表的原来的顺序进行插入 INSERT 表名(需要赋值的字段名称) VALUES|VA ...
- C++ string操作(转载)
1.string类的构造函数 string(const char * s); //用s字符串初始化 string(const string &s);//用string类的s初始化 string ...
- DROOLS相关资料
这个地址可以教你如何配置drools的workbench http://blog.csdn.net/u012373815/article/details/53526287 这篇文章教你如何搭建一个简单 ...
- Redhat 6 git服务器配置 (git-daemon)
git-daemon是按照git的自己的git协议进行访问git服务 1.git-daemon软件安装 软件仓库见 redhat 6 git 服务器 配置 (http) 2.配置git dae ...
- 哈雷监控设备的操作及升级NSG9k6G
哈雷监控设备的操作及升级NSG9k6G 一.下载升级包: http://pan.baidu.com/s/1kTmw9sr 如连接不可以用可以直接私聊我.QQ1841031740 二.升级: 下载完后, ...