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中的一切事物都是对象(都可以使用反射)

基于对象级别的反射

基于类级别的反射

基于模块级别的反射

四个可以实现自省的函数:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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)

使用演示:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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'))

四大金刚

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#反射当前模块的属性

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、反射的用途

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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()

实例一

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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功能:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

classFtpClient:'ftp客户端,但是还么有实现具体的功能'

def __init__(self,addr):print('正在连接服务器[%s]' %addr)

self.addr=addrdeftest(self):print('test')defget(self):print('get------->')

ftpclient.py

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

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

好处二:动态导入模块(基于反射当前模块)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#m=input("请输入你要导入的模块:")

#m1=__import__(m)#print(m1)#print(m1.time())

#推荐使用方法

importimportlib

t=importlib.import_module('time')print(t.time())

通过字符串导入模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为的汽车芯片布局

来源:电子发烧友综合报道,内容参考自雷锋网、IT之家、CnBeat,转载请注明以上来源由于政策扶持,新能源汽车发展迅速,华为也开始进军新能源汽车市场,最近动作频繁,例如联合意法半导体研发汽车芯片…

大热下的 GNN 研究面临哪些“天花板”?未来的重点研究方向又在哪?

作为脱胎于图论研究的热门研究领域,图神经网络(GNN)与经典的 WL 算法有诸多相似之处。众所周知,强大的 WL 算法对于聚合函数的单射性质有很强的要求,那么强大的 GNN 应该具备哪些性质呢?研究大热下&#xf…

java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...

场景:将一个层级类对象(领域驱动model对象)转换为平铺类对象(view)src对象,(红框为子对象)target对象(平铺对象)代码思路,先递归反射遍历出所有字段,存到一个map里,再递归赋值给target对象缺陷:不同子对象间…

新基建的内涵、意义和隐忧 ,基于互联网大脑模型的分析

2020年4月20日上午,国家发改委召开4月份例行新闻发布会,首次就“新基建”概念和内涵作出正式的解释。“新型基础设施是以新发展理念为引领,以技术创新为驱动,以信息网络为基础,面向高质量发展需要,提供数字…

罗兰贝格84页白皮书:一文看懂中国ICT产业新黄金十年

来源:智东西中国信息和通信技术产业(下称“ICT产业”)蓬勃发展的黄金三十年,展现出了强大的市场吸引力与发展潜能。从上个世纪九十年代至今,ICT产业收入规模增长了340倍,保持双位数增长,领先全球…

2020年五大虚拟现实和增强现实趋势

来源:AR工业应用2019年是VR/AR增长的一年,用户戴上VR头显就可以沉浸在计算机生成的环境中,VR在设计、营销、教育、培训和零售领域都有大量的需求。AR则通过屏幕或头显将计算机图像叠加到用户的真实世界视图上,预计2020年全球在XR技…

【实战练习】通过docker部署jenkins

jenkins官网 :https://jenkins.io/拉取jenkins Official Jenkins Docker image[rootip-172-31-16-58 ec2-user]# docker pull jenkins/jenkinsUsing default tag: latestlatest: Pulling from jenkins/jenkins06b22ddb1913: Pull complete336c28b408ed: Pull comp…

linux hive mysql_Linux下的Hive与Mysql安装

一,安装MySQLsudo apt-get install mysql-server mysql-client1). 建立数据库hive,create database hive;2). 创建用户hivecreate user ‘hive’’%’ identified by ‘hive’;3).创建hive用户,并授权grant all on hive.* to hive’%’ identified by ‘…

当AI实现多任务学习,它究竟能做什么?

来源:脑极体提到AI领域的多任务学习,很多人可能一下子就想到通用人工智能那里了。通俗意义上的理解,就像《超能陆战队》里的大白这样一种护理机器人,既能进行医疗诊断,又能读懂人的情绪,还能像陪伴机器人一…

mysql sql先后执行_MySQL中SQL语句执行顺序

(7) SELECT(8) DISTINCT (1) FROM (3) JOIN(2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 前期准备工作1、新建一个测试数据库create database testData;2、创建测试表,并插入数据如下:用户表订单表准备SQL逻辑查询测试语句SELECT a.user_id,C…

《自然》:欧洲根据已知基因序列合成新冠病毒,助力疫苗开发

来源:澎湃新闻当地时间5月4日,国际顶级学术期刊《自然》(Nature)以“加快评审文章”(Accelerated Article Preview)形式在线发表了来自瑞士、德国、俄罗斯多家科研机构的一项研究“Rapid reconstruction of SARS-CoV-2 using a sy…

谷歌论文:使用深度强化学习的芯片布局

来源:半导体行业观察摘 要在本项目中,我们提出了一种基于学习的芯片布局方法,这是芯片设计过程中最复杂,最耗时的阶段之一。与以前的方法不同,我们的方法具有从过去的经验中学习并随着时间的推移而不断改进的能力。特别…

吴建平院士:互联网视频技术在疫情防控中的重要作用

来源:互联网天地杂志疫情期间,要关注新一代信息技术助力疫情防控这个主题。最近新的技术非常多,但有一项技术可能被遗忘了,它属于新一代信息技术系列,在防控疾病或生活中发挥着很重要的作用,那就是互联网视…

java比较炫的小程序_推荐三款私藏多年的微信小程序

【小程序】(文后有福利)酷友们,大家好!今天一次性给大家介绍三款实用的微信小程序吧。这三款微信小程序基本上可以卸掉对应的 APP 了。同等功能下的 APP 和 微信小程序,当然会选择后者嘛,不仅消耗内存小,而且方便。1. …

2019年全球数字化转型现状研究报告

来源:Prophet数字化是整个企业范围内的优先战略事项我们的年度《数字化转型现状》研究迎来第五个年头,继续记录企业的不断发展。随着颠覆性技术及其对各大企业和市场的影响力不断加大,我们的研究旨在捕捉促成现代数字化转型的变化和趋势。201…

magent + memcached部署过程

magent memcached架构图 安装步骤如下: ------------------10.1.64.196 10.1.64.197 10.1.65.104 10.1.65.107 memcached (存储节点)---------------------------------------- yum install gcc mkdir /usr/local/src/memcached cd /usr/local/src/memcached ta…

BBC神作:半导体如何改变世界

来源:电子工程师笔记在纪录片领域BBC一直是打遍天下无敌手的存在作为纪录片王牌制作方近期,BBC与FedEx联合推出了神作Made on Earth系列《The humble mineral that transformed the world》作为零差评的重要一集用叹为观止的精良画面为观众讲述了半导体常…

jmeter练习(5)关联升级版—ForEach控制器(提取多个响应结果并依次传参)

前言:大多数情况下,我们会从上一个请求的响应结果中提取某一个值,作为第二个请求的参数进行传参,但是有时候为了提高测试效率,尽可能制造少的测试数据,我们需要从上一个请求的响应结果中获取某一组相同类型…

“天才少年”曹原再次连发2篇Nature!在魔角石墨烯取得系列新进展

来源:青塔、中国科学技术大学新创校友基金会、纳米人5月7日,被誉为“天才少年”的95后博士曹原分别以第一作者兼共同通讯作者、以及共同第一作者的身份,在《Nature》上连发2篇论文。第一篇Nature论文中,研究人员致力于通过对扭转角…

linux交叉编译aix_mips-linux-gcc交叉编译工具链搭建小结【转】

这几天开始做毕业设计了,MPEG2解码的MIPS实现,代码啥的网上一大堆,最大的困难也许不是理解代码,而是搭建环境,也就是搭建mips-linux-gcc交叉编译的环境。网上铺天盖地的都是arm-linux-gcc工具链的教程,唯独…