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 反射的更多相关文章

  1. python基础之 反射,md5加密 以及isinstance, type, issubclass内置方法的运用

    内容梗概: 1. isinstance, type, issubclass 2. 区分函数和方法 3. 反射(重点) 4. md5加密 1. isinstance, type, issubclass1 ...

  2. isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)

    6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...

  3. python 全栈开发,Day23(复习,isinstance和issubclass,反射)

    一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...

  4. python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射

    多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...

  5. isinstance与issubclass,反射

    目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...

  6. isinstance, type, issubclass

    isinstance: 判断你给对象是否是xx类型的. (向上判断)type: 返回xxx对象的数据类型issubclass: 判断xxx类是否xxx的子类 class Animal: def eat ...

  7. day23-1 isinstance、issubclass和反射

    目录 isinstance和issubclass 反射(hasattr,getattr,setattr,delattr) isinstance和issubclass isinstance(obj,cl ...

  8. 绑定与非绑定方法及反射,isinstance和issubclass内置函数

    目录 绑定方法与非绑定方法 1.绑定方法 2.非绑定方法(staticmethod) isinstance和issubclass 内置函数 1.isinstance 2.issubclass 反射(面 ...

  9. python基础(28):isinstance、issubclass、type、反射

    1. isinstance和issubclass 1.1 isinstance isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pa ...

随机推荐

  1. Niginx +Tomcat 集群搭建

    1 安装niginx服务器,然后启动,访问localhost;出现欢迎界面证明niginx启动成功: 如上图的目录是nginx1.1的目录结构: 2 之后下载tomcat,然后赋值一份,总共两个tom ...

  2. 使用线程池优化Echo模型

    在上一篇文章中 http://www.cnblogs.com/gosaint/p/8492356.html         我阐述了使用线程为每一个客户端创建一个工作线程来负责任务的执行.但是会存在如 ...

  3. WebView三个方法区别(解决乱码问题)

    最近使用WebView加载中文网页的时候出现乱码问题,网上整理下基本解决方法: 其实我发现这不管是在线还是离线显示都可以使用LoadUrl方法!联网时好像是默认utf-8,离线读取本地时需要设置默认编 ...

  4. C++面向对象类的实例题目七

    题目描述: 编写两个有意义的类,使一个类嵌套在另一个类中. 分析: 本题涉及两个类student和cdegree,前者为学生类,包含学生的学号(nubner),姓名(name)和成绩(degree), ...

  5. DB2--值为null则赋默认值

    数据库sql操作经常会做一些null值的处理.如果一个字段的值为null,我们希望查询出的结果默认设为0或空,则使用函数 COALESCE(column,0)  ,0的位置可以替换为其他值,可以是'' ...

  6. 客户注册功能,发短信功能分离 通过ActiveMQ实现

    客户注册功能,发短信功能分离 通过ActiveMQ 配置链接工厂, 配置session缓存工厂(引入链接工厂) 2.配置模板对象JmsTemplate 引入缓存工厂    指定消息模式(队列,发布和订 ...

  7. Zbar -- 源码分析

    博客转载自:https://blog.csdn.net/sunflower_boy/article/details/50783179 //Img_scanner.c 文件内 int zbar_scan ...

  8. PCL—点云分割(最小割算法) 低层次点云处理

    1.点云分割的精度 在之前的两个章节里介绍了基于采样一致的点云分割和基于临近搜索的点云分割算法.基于采样一致的点云分割算法显然是意识流的,它只能割出大概的点云(可能是杯子的一部分,但杯把儿肯定没分割出 ...

  9. jquery easyui datagrid 多选只能获取一条数据

    DataGrid属性: singleSelect ------如果为true,则只允许选择一行: idField ------- 指明哪一个字段是标识字段: 方法: 一:getSelections-- ...

  10. mac的idea不能编辑问题

    在安装的时候,因为在选择插件的时候,把IDEAVim这个玩意儿选上了.所以,编辑模式就跟命令行里面的Vim一样.输入时,需要先输入i, 进入insert模式下,然后才可以编辑.彻底解决办法就是进入Pr ...