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,转载请注明以上来源由于政策扶持,新能源汽车发展迅速,华为也开始进军新能源汽车市场,最近动作频繁,例如联合意法半导体研发汽车芯片…

Linux - which xxx - 查找执行的命令所在的路径

Linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这些命令所在的位置,如何做呢? Linux 下有2个命令可完成该功能:which ,whereis which 用来查看当 前要执行的命令所在的路径。 whereis 用来查看一个命令或者…

java 数据库 事务 只读_java – odd SQLException – 无法检索转换只读状态服务器

我有一个Quartz作业,每5分钟一次在MySQL数据库中执行一个存储过程,由于某种原因,3个执行中有1个失败,并提供了这个奇怪的异常。我搜索并搜索了这个异常是什么意思,但是我找不到解决方案。这是完整的堆栈跟踪&#xff1…

【转】JMeter学习(二十七)Jmeter常见问题

收集工作中JMeter遇到的各种问题1. JMeter的工作原理是什么?向服务器提交请求;从服务器取回请求返回的结果。2. JMeter的作用?JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ft…

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

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

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

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

HTML中关于图像和表格,链接等的知识

下面是我分享的html中关于图像和表格&#xff0c;链接等知识&#xff1a; ①<img/>图像标签 <img/>标签中的一些常见属性&#xff1a;1&#xff0c;src是图像的路径属性&#xff0c;是img标签中必不可少的属性。 2&#xff0c;alt是代表当图像显示失败时代替图像的…

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

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

丑数

问题描述&#xff1a;我们只把包含因子2、3和5的数称为丑数。求按从小到大的顺序的第1500个丑数。 分析&#xff1a;要找到第i个丑数&#xff0c;需要用辅助数组存储前面i-1个丑数&#xff0c;用空间换取时间。 package com.wyl; /*** 求丑数* 问题描述&#xff1a;我们只把包含…

jssdk分享设置_JSSDK自定义分享

web&#xff1a;1、引入JS文件&#xff1a;http://res.wx.qq.com/open/js/jweixin-1.4.0.js(支持https)http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)2、获取签名等参数wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来&…

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

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

Python之旅Day8 socket网络编程

socket网络编程 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”&#xff0c;而打开一个Socket需要知道目标计算机的IP地址和端口号&#xff0c;再指定协议类型即可。socket服务一般分为服务端和客户端&#xff1b;与此同时&#xff0c;socke…

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

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

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

jenkins官网 &#xff1a;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安装

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

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

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

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、创建测试表,并插入数据如下&#xff1a;用户表订单表准备SQL逻辑查询测试语句SELECT a.user_id,C…

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

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

转:日志组件logback的介绍及配置使用方法

转自&#xff1a;http://blog.csdn.net/zgmzyr/article/details/8267072 一、logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块&#xff1a;logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。lo…

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

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