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 ...
随机推荐
- maven安装第三方jar包到本地仓库
添加项目依赖的时候,有些jar下载不下来,只有手动下载或安装到本地仓库了 首先下载所需要的jar,放到指定的文件夹 然后执行如下命令: mvn install:install-file -Dfile= ...
- xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at:
今天更新了一下mac系统,然后发现 idea的svn插件不能用了,有的报 有的报 is not under version 经查找需要做如下处理,打开终端,安装xcode: xcode-selec ...
- ROS Learning-016 Arduino-For-ROS-001 搭建 Arduino 和 ROS 之间相连接的开发环境
Arduino For ROS-001 - 搭建 ROS 和 Arduino 相连接的开发环境 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduin ...
- C#调用C++类库的几种方式
1. 直接调用C++类库中的公共方法 使用DllImport特性对方法进行调用,比如一个C++类库SampleCppWrapper.dll中的公共方法: extern "C" _ ...
- c语言学习笔记-变量、变量的命名、变量的赋值和变量的初始化
在学习了简单的输入输出功能和了解了一些基本的运算符号之后我们可以试着做一个非常简单的计算器. 比如说想计算23+65 输入以下代码就可以了. printf("23+65=%d",2 ...
- Java-马士兵设计模式学习笔记-装饰者模式
Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...
- 简单VBS教程.RP
Mimick同菜鸟==.文转豆瓣~:https://www.douban.com/note/88562379/ 讲一下VBScript.主要面向菜鸟,懂得编程的朋友就不要浪费时间了,如果你想接触以下V ...
- Struts2返回JSON数据的具体应用范例
早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找 ...
- js/jq基础(日常整理记录)-3-一个自定义表格
一.一个自定义的表格 这个js是我刚工作的时候,我们老大让我做一个功能,我觉得html自带的table功能单一,没有分页和排序功能,所有就尝试着做一下,所以这个东西就出来了.很久没写博客了,贴出来吧, ...
- 《网络攻防》 第十二周作业 SQL注入
SQL注入实践 1.打开seed虚拟机,使用命令sudo service apache2 start启动apache,发现一条提示,意思就是不能可靠地确定域名,如图 即使右下角标着OK,但我还是不放心 ...