反射的定义

根据字符串的形式去某个对象中操作成员

  1. 根据字符串的形式去某个对象中寻找成员
  2. 根据字符串的形式去某个对象中设置成员
  3. 根据字符串的形式去某个对象中删除成员
  4. 根据字符串的形式去某个对象中判断成员是否存在

反射相关函数

getattr(object,name,[default])

获取一个对象的属性或者方法,如果存在就打印出来,如果不存在就打印出默认值,默认值是可选的

注意:返回的对象方法,返回的是内存地址,如果需要执行这个方法,需要在后面加上括号'()'

>>> class test():
... name="xiaohua"
... def run(self):
... return "HelloWord"
... >>> t=test() #实例化这个类
>>> getattr(t, "name") #获取name属性,存在就打印出来。
'xiaohua' >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。
<bound method test.run of <__main__.test instance at 0x0269C878>> >>> func = getattr(t, "run") #获取run方法,加个括号就可以执行这个方法
>>> func()
'HelloWord' >>> getattr(t, "age") #获取一个不存在的属性,就报错
Traceback (most recent call last):
File "<stdin>", line , in <module>
AttributeError: test instance has no attribute 'age'
>>> getattr(t, "age","") #若属性不存在,返回一个默认值。
''

setattr(object,name,value)

给对象的属性赋值,若属性不存在,就先创建在赋值

  >>> class test():
... name="xiaohua"
... def run(self):
... return "HelloWord"
...
>>> t=test()
>>> hasattr(t, "age") #判断属性是否存在
False >>> setattr(t, "age", "") #为属相赋值,并没有返回值
>>> hasattr(t, "age") #属性存在了
True
>>>

delattr(object,name)

根据字符串的形式去某个对象中删除成员

>>> getattr(commons, "Name")
'ZhaiJunMing'
>>> delattr(commons, "Name")
# 获取不到就报错
>>> getattr(commons, "Name")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'commons' has no attribute 'Name'

hasattr(object,name)

根据字符串的形式去某个对象中判断成员是否存在

比如:判断一个对象里面是否有name属性或者name方法,返回bool值,有则True,否则False

 >>> class test():
... name="xiaohua"
... def run(self):
... return "HelloWord"
... >>> t=test()
>>> hasattr(t, "name") #判断对象有name属性
True >>> hasattr(t, "run") #判断对象有run方法
True
>>>

Python学习系列之反射的更多相关文章

  1. Python学习系列(九)(IO与异常处理)

    Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Pytho ...

  2. Python学习系列(八)( 面向对象基础)

     Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...

  3. Python学习系列(七)( 数据库编程)

    Python学习系列(七)( 数据库编程)        Python学习系列(六)(模块) 一,MySQL-Python插件       Python里操作MySQL数据库,需要Python下安装访 ...

  4. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

  5. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  6. Python学习系列(四)(列表及其函数)

    Python学习系列(四)(列表及其函数) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) Python学习系列(三)(字符串) 一.基本概念 1,列表是什么?     ...

  7. Python学习系列(三)(字符串)

    Python学习系列(三)(字符串) Python学习系列(一)(基础入门) Python学习系列(二)(基础知识) 一个月没有更新博客了,最近工作上有点小忙,实在是没有坚持住,丢久又有感觉写的必要了 ...

  8. Python学习系列(二)(基础知识)

    Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比, ...

  9. Python学习系列:目录

    Python学习系列(二)Python 编译原理简介 Python学习系列(三)Python 入门语法规则1 Python学习系列(四)Python 入门语法规则2

随机推荐

  1. 手动将Excel数据导入SQL

    1. 右键点击数据库名称,Tasks --> Import Data... 2. Choose Data Source:MicroSoft Excel,选择Excel文件和Excel版本.Exc ...

  2. Request.Form("id")与Request.QueryString("id")的区别

    获取以表单提交的post类型的值,也就是获取<form method="post">这种方式提交的值request包含各种方式的值,没有指名是什麽,所以Request. ...

  3. 仿陌陌的ios客户端+服务端源码

    软件功能:模仿陌陌客户端,功能很相似,注册.登陆.上传照片.浏览照片.浏览查找附近会员.关注.取消关注.聊天.语音和文字聊天,还有拼车和搭车的功能,支持微博分享和查找好友. 后台是php+mysql, ...

  4. vb 案例学习

    ' ================================================================================================== ...

  5. zabbix_sender

    转载一个python写的zabbix sender脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import struc ...

  6. MFC中使用post提交form-data上传文件

    已经有将近6年时间没写过MFC了,想想以前我也是写VC++入门程序开发的,那时候写协议栈.搞语音编码.做视频压缩和实时数据传输,相比现在更多偏业务的开发,那时候搞得都是非常技术的东西.眨眼间,MFC已 ...

  7. js 脚本语言

    字符串转换为数字 parseInt(string) .parseFloat().Number() 参考博客:https://zhidao.baidu.com/question/629898532158 ...

  8. 【转】c++数组初始化

    数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值. 原文:C/C++数组初始化的一些误区 以前我这样初始化一个数组,并自我感觉良好: ] = { }; // 全部初始化为0 这种简 ...

  9. (独孤九剑)--PHP简介与现况

    (1)为什么学习PHP? 1.好就业: 2.入门简单,学习周期短,两个月即可: 3.学习编程思路,使编程习惯更加规范: 4.大公司直招: 5.处理大并发数据: 6.开源,所以更加安全 (2)PHP是什 ...

  10. 给SVN控制的项目添加忽略文件/文件夹

    忽略目录其实有些像建立一个文件夹,但却不放入版本控制.如果不加入版本控制又会在svn status命令中显示出来,很不方便,所以可以设置本文件夹属性,让它既加入版本控制,又忽略其变化 未加入控制的文件 ...