hasattr(obj,name):

判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False。
需要注意的是name要用括号括起来

 
  1. 1 >>> class test():
  2. 2 ... name="xiaohua"
  3. 3 ... def run(self):
  4. 4 ... return "HelloWord"
  5. 5 ...
  6. 6 >>> t=test()
  7. 7 >>> hasattr(t, "name") #判断对象有name属性
  8. 8 True
  9. 9 >>> hasattr(t, "run") #判断对象有run方法
  10. 10 True
  11. 11 >>>
 

getattr(obj,name[,default])

获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。
需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,
可以在后面添加一对括号。

 
  1. 1 >>> class test():
  2. 2 ... name="xiaohua"
  3. 3 ... def run(self):
  4. 4 ... return "HelloWord"
  5. 5 ...
  6. 6 >>> t=test()
  7. 7 >>> getattr(t, "name") #获取name属性,存在就打印出来。
  8. 8 'xiaohua'
  9. 9 >>> getattr(t, "run") #获取run方法,存在就打印出方法的内存地址。
  10. 10 <bound method test.run of <__main__.test instance at 0x0269C878>>
  11. 11 >>> getattr(t, "run")() #获取run方法,后面加括号可以将这个方法运行。
  12. 12 'HelloWord'
  13. 13 >>> getattr(t, "age") #获取一个不存在的属性。
  14. 14 Traceback (most recent call last):
  15. 15 File "<stdin>", line 1, in <module>
  16. 16 AttributeError: test instance has no attribute 'age'
  17. 17 >>> getattr(t, "age","") #若属性不存在,返回一个默认值。
  18. 18 ''
  19. 19 >>>
 

setattr(obj,name,values)

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

 
  1. 1 >>> class test():
  2. 2 ... name="xiaohua"
  3. 3 ... def run(self):
  4. 4 ... return "HelloWord"
  5. 5 ...
  6. 6 >>> t=test()
  7. 7 >>> hasattr(t, "age") #判断属性是否存在
  8. 8 False
  9. 9 >>> setattr(t, "age", "") #为属相赋值,并没有返回值
  10. 10 >>> hasattr(t, "age") #属性存在了
  11. 11 True
  12. 12 >>>
 

一种综合的用法是:判断一个对象的属性是否存在,若不存在就添加该属性。

 
  1. 1 >>> class test():
  2. 2 ... name="xiaohua"
  3. 3 ... def run(self):
  4. 4 ... return "HelloWord"
  5. 5 ...
  6. 6 >>> t=test()
  7. 7 >>> getattr(t, "age") #age属性不存在
  8. 8 Traceback (most recent call last):
  9. 9 File "<stdin>", line 1, in <module>
  10. 10 AttributeError: test instance has no attribute 'age'
  11. 11 >>> getattr(t, "age", setattr(t, "age", "")) #age属性不存在时,设置该属性
  12. 12 ''
  13. 13 >>> getattr(t, "age") #可检测设置成功
  14. 14 ''
  15. 15 >>>
 

在做stark中一些反射的问题。的更多相关文章

  1. 详解C#中的反射

    反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B ...

  2. python中的反射

    在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...

  3. .net中的反射(转载)

    原文地址:http://www.cnblogs.com/Stephenchao/p/4481995.html 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的 ...

  4. .Net 中的反射(序章) - Part.1

    引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助. 反射是一个庞大的话题,牵扯到的知识 ...

  5. 【转】详解C#中的反射

    原帖链接点这里:详解C#中的反射   反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内 ...

  6. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  7. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  8. 详解C#中的反射(转载)

    反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是 ...

  9. java中动态反射

    java中动态反射能达到的效果和python的语法糖很像,能够截获方法的实现,在真实方法调用之前和之后进行修改,甚至能够用自己的实现进行特别的替代,也可以用其实现面向切片的部分功能.动态代理可以方便实 ...

随机推荐

  1. Should we ban guns 英语禁枪议论文

    Should we ban guns ? 我们应该禁枪吗? 英语议论文 Should we ban guns? Author:Pleiades_Antares(www.cnblogs.com/iris ...

  2. ElasticSearch(一):CentOS7 安装 ElasticSearch6.4.0

    一.安装jre支持 在CentOS中安装ElasticSearch需要Java1.8.0,可执行命令#  java -version查看当前系统所安装Java版本是否为1.8.0版本. 若非1.8.0 ...

  3. Cglib动态代理实现方式

    Cglib动态代理实现方式 我们先通过一个demo看一下Cglib是如何实现动态代理的. 首先定义个服务类,有两个方法并且其中一个方法用final来修饰. public class PersonSer ...

  4. 文本分类实战(一)—— word2vec预训练词向量

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  5. Leetcode:234 回文链表

    leetcode:234 回文链表 关键点:请判断一个链表是否为回文链表.示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true. ...

  6. centos7 mysql5.7安装

    环境:centos7.4 mysql:5.7 安装方式yum安装: wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noa ...

  7. Error: Cannot find module 'babel-runtime/regenerator'

    在做调用阿里云短信接口时遇到的一个问题 错误原因:没有正确安装相应的mmodule 解决办法: 第一步:在package.json中加入依赖label-runtime 第二步:在Terminal中 n ...

  8. vsftpd 有关vsftpd的3个注意事项。。sshd[pid]: fatal: chroot into directory without nodev and either noexec or nosuid

    今天帮助已好友配置vsftpd,可能是长时间不用这个东西了,竟然这里个半天才把需求折腾完, 其实需求简单,就是使用系统账户登录,不可跳转目录,限制权限,只能上次不能下载. 懵逼一: 最开始配置sftp ...

  9. 开源框架bboss单点登录demo跑起来

    目前公司新项目要使用一个开源框架bboss的单点登录功能,要将此功能整合到新系统中去,所以我就学习了一下. 首先,进入这个bboss框架作者的博客中,找到相应的session共享,单点登录的博文,看了 ...

  10. C# socket实践 - 简易版FTP(Server & Client)

    写了个简易版的ftp(服务器和客户端),运行效果如下图: click download下载中的UI: 原理:模仿正规ftp方式,分成2个socket连接:文本命令socket.数据信道socket. ...