issubclass在python中的意思_python基础之类的isinstance与issubclass、反射
一 isinstance(obj,cls)和issubclass(sub,super)
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo:
pass
obj = Foo()
print(isinstance(obj,Foo))
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo:
pass
class Bar(Foo):
pass
print(issubclass(Bar,Foo))
二 反射
1、什么是反射
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。
2、python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
基于对象级别的反射
基于类级别的反射
基于模块级别的反射
四个可以实现自省的函数:
def hasattr(*args, **kwargs): #real signature unknown
"""Return whether the object has an attribute with the given name.
This is done by calling getattr(obj, name) and catching AttributeError."""
pass
#检测是否含有某属性
hasattr(object,name)
def getattr(object, name, default=None): #known special case of getattr
"""getattr(object, name[, default]) -> value
Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
When a default argument is given, it is returned when the attribute doesn't
exist; without it, an exception is raised in that case."""
pass
#获取属性
getattr(object, name, default=None)
def setattr(x, y, v): #real signature unknown; restored from __doc__
"""Sets the named attribute on the given object to the specified value.
setattr(x, 'y', v) is equivalent to ``x.y = v''"""
pass
#设置属性
setattr(x, y, v)
def delattr(x, y): #real signature unknown; restored from __doc__
"""Deletes the named attribute from the given object.
delattr(x, 'y') is equivalent to ``del x.y''"""
pass
#删除属性
delattr(x, y)
使用演示:
classPeople:
country='China'
def __init__(self,name):
self.name=namedefwalk(self):print('%s is walking'%self.name)
p=People('egon')print(People.__dict__)print(p.name)print(p.__dict__)#----------------------
#hasattr
print('name' in p.__dict__)print(hasattr(p,'name'))print(hasattr(p,'name1213'))print(hasattr(p,'country')) #p.country #基于对象
print(hasattr(People,'country')) #People.country #基于类
print(hasattr(People,'__init__')) #People.__init__
#----------------------
#getattr
res=getattr(p,'country') #res=p.country
print(res)
f=getattr(p,'walk') #t=p.walk
print(f)
f1=getattr(People,'walk')print(f1)
f()
f1(p)print(p.xxxxxxx)print(getattr(p,'xxxxxxxx','这个属性确实不存在'))if hasattr(p,'walk'):
func=getattr(p,'walk')
func()print('================>')print('================>')#----------------------
#setattr
p.sex='male'
print(p.sex)print(p.__dict__)
setattr(p,'age',18)print(p.__dict__)print(p.age)print(getattr(p,'age'))
四大金刚
#反射当前模块的属性
importsys
x=1111
classFoo:pass
defs1():print('s1')defs2():print('s2')#print(__name__)
this_module= sys.modules[__name__]print(this_module)print(hasattr(this_module, 's1'))print(getattr(this_module, 's2'))print(this_module.s2)print(this_module.s1)
大力丸
模块补充:
__name__可以区别文件的用途:
一种用途是直接运行文件,这叫把文件当成脚本运行。
一种用途是不运行文件,在另一个文件中导入这个模块。
3、反射的用途
importsysdefadd():print('add')defchange():print('change')defsearch():print('search')defdelete():print('delete')
func_dic={'add':add,'change':change,'search':search,'delete':delete
}whileTrue:
cmd=input('>>:').strip()if not cmd:continue
if cmd in func_dic: #hasattr()
func=func_dic.get(cmd) #func=getattr()
func()
实例一
importsysdefadd():print('add')defchange():print('change')defsearch():print('search')defdelete():print('delete')
this_module=sys.modules[__name__]whileTrue:
cmd=input('>>:').strip()if not cmd:continue
ifhasattr(this_module,cmd):
func=getattr(this_module,cmd)
func()
使用反射来实现:实例一
好处一:实现可插拔机制
反射的好处就是,可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,这其实是一种‘后期绑定’,什么意思?即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能
模拟FTP功能:
classFtpClient:'ftp客户端,但是还么有实现具体的功能'
def __init__(self,addr):print('正在连接服务器[%s]' %addr)
self.addr=addrdeftest(self):print('test')defget(self):print('get------->')
ftpclient.py
importftpclient#print(ftpclient)#print(ftpclient.FtpClient)#obj=ftpclient.FtpClient('192.168.1.3')
#print(obj)#obj.test()
f1=ftpclient.FtpClient('192.168.1.1')if hasattr(f1,'get'):
func=getattr(f1,'get')
func()else:print('-->不存在此方法')print('其他逻辑')
ftpserver.py
好处二:动态导入模块(基于反射当前模块)
#m=input("请输入你要导入的模块:")
#m1=__import__(m)#print(m1)#print(m1.time())
#推荐使用方法
importimportlib
t=importlib.import_module('time')print(t.time())
通过字符串导入模块
issubclass在python中的意思_python基础之类的isinstance与issubclass、反射相关推荐
- python中factor函数_Python基础教程
6.4.5 参数收集的逆过程 假设有如下函数: def add(x,y): return x+y 比如说有个包含由两个相加的数字组成的元组: params = (1,2) 使用*运算符对参数进行&qu ...
- python中列表数据类型_python基础数据类型一(列表)
列表 列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. 比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: ...
- python中符号输入_Python基础(输入、运算符)
输入 1. python2版本中 1.1 使用 raw_input()函数, 看如下示例: password = raw_input("请输入密码:") print ('您刚刚输入 ...
- python中ijust函数_Python基础
脚本运行Windows 下需将python加入的系统变量中: Linux 下需添加头部#! /usr/bin/enc python print('Hello World!') 循环 for 循环 fo ...
- python中fac函数_Python基础复习函数篇
目录 1.猴子补丁 2. global和nonlocal关键字 3.迭代器和生成器 4.递归函数 5.高阶函数和lamdba函数 6.闭包 7.装饰器 1. 猴子补丁 猴子补丁主要用于在不修改已有 ...
- middles在python中什么意思_Python 基础知识入门(2)
字符串格式化 Python字符串格式化有两种方式:百分号方式.format方式: 百分号的方式相对比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并在: 一.百分号方式 %[ ...
- python中function函数_Python基础---函数Function
函数Function 定义:带名字的代码块,用于完成具体的工作 最基本的一种代码抽象的方式,借助函数,可以不用关心底层的具体计算过程,直接在更高层次上思考问题 在Python中,内置了多种多样的函数, ...
- [转载] issubclass在python中的意思_python issubclass 和 isinstance函数
参考链接: Python issubclass() Python issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. ...
- python中globals用法_Python基础教程之内置函数locals()和globals()用法分析
本文实例讲述了Python基础教程之内置函数locals()和globals()用法.分享给大家供大家参考,具体如下: 1. 这两个函数主要提供,基于字典的访问局部变量和全局变量的方式. python ...
最新文章
- Quartz.Net—配置化
- php分页功能乱码了怎么办,51、PHP文件内容分页操作,避免乱码
- mysql子查询查询子字段_MySQL知识整理7.4—子查询
- CVPR 2021 论文分享会预告
- 现在有什么开源的语音识别吗?
- RabbitMQ之安装windows
- 太阳高度角计算题_太阳高度角计算练习题
- RocketMQ(四)Linux搭建RocketMQ集群
- DTOJ #1079. 多项式展开 mult
- 光缆接续盒图标_光缆线路施工技术(超全)
- Poco库完全使用手册
- jQuery的文档处理
- Java多线程 -- 深入理解JMM(Java内存模型) --(五)锁
- IPAD 安装win8 苏菲安装Mac OS iphone安装安卓
- Linux请求调页技术,linux零页技术.doc
- Non-parametric Classifiers
- Android-手机杀毒
- 微生物网络分析学习手稿
- 微型 Python Web 框架: Bottle
- 毕业设计 单片机(stm32)远程宠物喂养系统 - 物联网 esp8266
热门文章
- 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
- 无穷大正整数 python_python模块:数字处理
- python中_str_使用方法
- Python基础(一)--初识Python
- 平行空间怎么设置32位_高低床怎么设置不占空间
- 别再搞纯文本了!多模文档理解更被时代需要!
- ICML2020 | 一行代码就能实现的测试集上分技巧
- 微服务设计原则和解决方案
- Android官方开发文档Training系列课程中文版:Android的安全建议
- Android官方开发文档Training系列课程中文版:APP的内存管理