Python_019(六星级别之反射方法)
1.反射
1)神赐给你的内置函数 :
a: getattr(命名空间,'函数名') == 命名空间.属性名; 这里的命名空间指的是对象或者类;
b: getattr四个应用场景:
1)类名.名字 <==> getattr(类名,'名字')
2)对象名.名字 <==> getattr(对象名,'名字')
3)模块名.名字 <==> getattr(模块名,'名字')
4)自己文件名.名字 <==> getattr(自己文件名,'名字')
c:getattr的天命圈
**getattr(命名空间,'函数名',默认值参数)这个默认值参数就很强大,getattr会先找指定成员,如果存在
则返回成员引用,否则返回默认值参数;但是你如果不传默认值参数,如果找不到会报错(它与hasttr异常处理的区别见下边解释)
所以总结来说,getattr就是把你用小数点调用的方式转换为getattr(命名空间,‘静态变量名/动态变量名)
2)hasattr():
a:功能指定对象中是否含有指定成员,有则返回True,否则返回False;
b:格式:hasattr(指定对象空间,变量名)
c:异常处理时与hasattr的区别:
imp = input('>>>:')
imp_module = __import__(imp)
while 1:
fun_name = input('>>>:')
func = getattr(imp_module,fun_name,True) #如果找不到,则返回默认参数
if func == True: #对找不到的情况处理
print('重新输入!')
continue
else:
a = func()
print(a)
imp = input('>>>:')
imp_module = __import__(imp)
while 1:
fun_name = input('>>>:')
ret = hasattr(imp_module, fun_name) #查看指定对象里的情况,如果没有返回False
if ret == True: #对找不到的情况处理
func = getattr(imp_module,fun_name)
a = func()
print(len(a))
else:
print('重新输入!')
continue
第一段程序是利用默认值 第二段是利用hasattr(后者是对指定对象空间处理,比较精准)
3)setattr():
a: 功能:给指定对象添加指定成员
b:格式:setattr(对象空间,要改的变量名,新值)
4)delattr()
a:功能删除指定对象中的指定成员
b:格式delattr(对象空间,变量名)
Python_019(六星级别之反射方法)的更多相关文章
- 【转】第7篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:全自动注册与反射方法分析
作者: 牛A与牛C之间 时间: 2013-12-12 分类: 技术文章 | 2条评论 | 编辑文章 主页 » 技术文章 » 第7篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【译】5. Java反射——方法
原文地址:http://tutorials.jenkov.com/java-reflection/methods.html ====================================== ...
- FastMethod和PropertyUtils两种反射方法的性能比较
这两个类都提供反射方法的实现,性能对比如下: 循环条件是:1亿次 结论:PropertyUtils提供的getXXX和setXXX反射方法的性能是FastMethod的三倍 以下是测试方法: 首先是F ...
- Python 中的反射方法
一.概述 getattr # 根据字符串为参数,去对象中找与之同名的成员. hasattr # 根据字符串为参数,去判断对象中是否有与之同名的成员. setattr # 根据字符串为参数,动态的设置一 ...
- 通过Relect反射方法创建对象,获得对象的方法,输出对象信息
package reflects; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java. ...
- C#中通过反射方法获取控件类型和名称
这个方法是简单的也是神奇的. 有木有想过,将自己项目中的所有类型,包括自定义类型的命名空间和名称全部获取出来? 有木有想过,有一种简便的方法可以自动化管理项目中的控件和窗体? 有木有想过... 首先, ...
- [javaSE] 反射-方法的反射
1.如何获取某个方法 方法的名称和方法的参数列表才能唯一决定一个方法 2.方法反射的操作 method.invoke(); package com.tsh.reflect; import java.l ...
- Java反射-方法(Method)
工作了三年,第二次使用反射! 遇到的问题描述: 多个页面查询后,返回的List中的对象属性为“.00”,页面显示不友好. 查询原因是因为查询数据的SQL为:to_char(a.applyAmount, ...
随机推荐
- 数据库之DML
1.表的有关操作: 1.1.表的创建格式: CREATE TABLE IF NOT EXISTS 表名(属性1 类型,属性2 类型,....,属性n 类型):# 标记部分表示可以省略 1.2.表的修改 ...
- win10安装anaconda及tensorflow1.9版本
前言 因为之前的anaconda的conda命令不能用,又找不到原因,所以就决定重装anaconda,然后再装个tensorflow环境.. 正文 可以去官网下载,也可以去清华的开源软件镜像站下载ht ...
- 【Linux开发】Linux V4L2驱动架构解析与开发导引
Linux V4L2驱动架构解析与开发导引 Andrew按:众所周知,linux中可以采用灵活的多层次的驱动架构来对接口进行统一与抽象,最低层次的驱动总是直接面向硬件的,而最高层次的驱动在linux中 ...
- EML文件(MIME邮件)格式分析
电子邮件普遍遵循的邮件技术规范.MIME邮件由邮件头和邮件体两部分组成.邮件头包括:标题,送信人,收信人,创建日期,邮件体内容类型和邮件体编码方式等内容.邮件体包括:正文,超文本,内嵌数据和附件等内容 ...
- tensorflow白话篇
接触机器学习也有相当长的时间了,对各种学习算法都有了一定的了解,一直都不愿意写博客(借口是没时间啊),最近准备学习深度学习框架tensorflow,决定还是应该把自己的学习一步一步的记下来,方便后期的 ...
- 请写出一段Python代码实现删除一个list里面的重复元素?
方法1:使用set函数 s=set(list),然后再list(s) 方法2:append def delList(L): L1 = [] for i in L: if i not in L1 ...
- 使用vscode来代替git上传代码到仓库
一.在上传前的注意事项 1. 要配置几个文件: (1)在根目录添加 .gitignore 文件:里面添加一些上传时需要忽略的文件 (2)在根目录添加 README.md 文件,这个用来说明项目的 ...
- C#人民币金额大写转换
人民币金额大小写转换,三行代码 //完善了一下查询到的方法,支持小数,保留2位小数 public string NumGetStr(double Num) { string[] DX_SZ = { & ...
- OC中数组排序的3种方法
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...
- linux NFS 实例
为了证明是 Allentunsgroup 组起的作用而非用户 [root@NFS_Client ~]# useradd scott1 [root@NFS_Client ~]# passwd scott ...