python中hasattr()、getattr()、setattr()函数

  1. class A():
  2. name = 'python'
  3. def __init__(self):
  4. setattr(self.__class__, 'func_class', self.func)
  5. def func(self):
  6. return 'Hello world:func'
  7. @classmethod
  8. def funcmethod(cls):
  9. return 'Hello world:funcmethod'
  10.  
  11. """
  12. hasattr(object, name)
  13. 判断object对象中是否存在name属性,属性包含变量和方法;有则返回True,没有则返回False;
  14. name为string类型
  15. """
  16. print('hasattr==>')
  17. print(hasattr(A, 'name')) #判断变量
  18. print(hasattr(A, 'func')) #判断方法
  19.  
  20. """
  21. getattr(object, name[, default])
  22. 获取object对象的name属性的值,如果存在则返回属性值,不存在需要给定值,否则报错
  23. 属性为方法时:1实例类,2加括号调方法
  24. """
  25. print('getattr==>')
  26. print(getattr(A, 'name')) #返回已定义属性值,再给定值也是无效
  27. print(getattr(A, 'age', 20)) #返回未定义属性需要给定值,否则报错;不可在下次直接使用
  28. print(getattr(A, 'func')) #返回函数对象
  29. print(getattr(A(), 'func')()) #返回函数的返回值
  30. print(getattr(A, 'funcmethod')()) #返回@classmethod函数的返回值
  31.  
  32. """
  33. setattr(object, name, value) object为对象不是单纯的字符串
  34. 给object对象的name属性赋值,存在则修改,不存在则创建(可在同一个实例中直接使用)
  35. """
  36. print('setattr==> name:{}'.format(getattr(A, 'name')))
  37. setattr(A, 'name','shuzf') #修改变量值
  38. setattr(A, 'age',30) #创建变量并赋值
  39. print(getattr(A, 'name')) #返回已定义属性值
  40. print(getattr(A, 'age')) #返回未定义属性
  41.  
  42. """
  43. value为该对象方法时:获取name属性值,即获取方法;外部赋值方法为类静态方法,内部赋值不需要直接self.func
  44. """
  45. setattr(A,'funcmethod_class',A.funcmethod) #创建变量并赋值方法
  46. print(getattr(A,'func_class')()) #返回未定义属性值,内部赋值,值为方法
  47. print(getattr(A,'funcmethod_class')()) #返回未定义属性值,外部赋值,值为方法
  48.  
  49. hasattr==>
  50. True
  51. True
  52. getattr==>
  53. python
  54. 20
  55. <function A.func at 0x02C5D6F0>
  56. Hello worldfunc
  57. Hello worldfuncmethod
  58. setattr==> namepython
  59. shuzf
  60. 30
  61. Hello worldfunc
  62. Hello worldfuncmethod

对上面演示:对于已实例的对象,则不需要考虑是否是静态方法

  1. import sys
  2. class A:
  3. def __init__(self, str):
  4. self.name = str #name不为该类的属性
  5. setattr(self.__class__, self.name, self.test)
  6.  
  7. def test(self):
  8. return sys._getframe().f_code.co_name
  9.  
  10. if __name__ == '__main__':
  11. a = A("shuzf")
  12.  
  13. print(a.shuzf)
  14. print(a.shuzf())
  15. print(getattr(a,'shuzf'))
  16. print(getattr(a, 'shuzf')())
  17.  
  18. setattr(a,'func',a.test)
  19. print(a.func)
  20. print(a.func())
  21. print(getattr(a,'func'))
  22. print(getattr(a,'func')())

对上面演示:对于类内部使用三函数,类名、self都是可以的;创建多个实例类时

  1. A.name创建的属性可以多个实例相互使用,说明地址没有回收
  1. setattr创建的属性只能同一个实例使用
  1. class A():
  2. def __init__(self):
  3. setattr(self.__class__, 'func_class', self.func)
  4. def func(self):
  5. print(hasattr(self, 'name')) # 判断变量
  6. A.name = 'python' #创建变量
  7. #setattr(self, 'name','python')# 创建变量
  8. print(getattr(self, 'name')) # 获取变量
  9. return 'Hello world:func'
  10. @classmethod
  11. def funcmethod(cls):
  12. return 'Hello world:funcmethod'
  13.  
  14. print(getattr(A(), 'func')())
  15. print(getattr(A(), 'func')())

python-hasattr()、getattr()、setattr()函数的使用的更多相关文章

  1. 【转】Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...

  2. 反射之hasattr() getattr() setattr() 函数

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断object中有没有一个name字符串对应的方法或属性,返回B ...

  3. python eval() hasattr() getattr() setattr() 函数使用方法详解

    eval() 函数 --- 将字符串str当成有效的表达式来求值并返回计算结果. 语法:eval(source[, globals[, locals]]) ---> value 参数: sour ...

  4. Python hasattr,getattr,setattr,delattr

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # 反 ...

  5. hasattr() getattr() setattr() 函数使用详解??

    hasattr(object, name)函数: 判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False. **注意:name要使用 ...

  6. Python标准库:内置函数hasattr() getattr() setattr() 函数使用方法详解

    hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False.参数object是一个对象 ...

  7. Python的hasattr() getattr() setattr() 函数使用方法详解

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

  8. Python的hasattr() getattr() setattr() 函数使用方法详解 (转)

    来自:https://www.cnblogs.com/cenyu/p/5713686.html hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOO ...

  9. Python的hasattr() getattr() setattr() 函数使用方法

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

  10. Python的hasattr() getattr() setattr() 函数使用方法详解--转载

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

随机推荐

  1. 使用python脚本部署mariadb主从架构

    环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. grant all on *.* to root@'%'  iden ...

  2. 《Using Python to Access Web Data》 Week5 Web Services and XML 课堂笔记

    Coursera课程<Using Python to Access Web Data> 密歇根大学 Week5 Web Services and XML 13.1 Data on the ...

  3. JavaScript —— 实现简单计算器【带有 开/关机 清零 退格 功能】

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. jmap -heap命令用法

    用jmap -heap命令可以查看linux堆内存分布 具体用法 1:先查出tomcat的进程号 例如: 然后执行 jmap -heap 7095 可以打印出整体的堆信息   可以看到经过分配的存活区 ...

  5. IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa

    inet_pton NAME     inet_pton - 将 IPv4 和 IPv6 地址从点分十进制转换为二进制 SYNOPSIS #include <arpa/inet.h> in ...

  6. Mybatis-学习笔记(8)常用的注解

    1.常用的注解. 2.@insert.@delete.@update.@select完成常见的CRUD操作. import java.util.List; import org.apache.ibat ...

  7. vue组件命名和传值

    一.vue组件命名: 组件有好几种命名方式, 可以使用 component-vue (短横线分隔命名).componentVue  (驼峰式命名) 或ComponentVue  (单词首字母) 因为h ...

  8. 【错误】jsp查询字符串中空格导致的异常问题!

    jsp中查询字符串中空格问题 jsp中查询字符串中参数名的等号右边最好不要出现空格,因为编译器会把他当做是参数值得一部分. 例如: <a href="adjust.jsp?number ...

  9. Larkin’s NOI

    Larkin’s NOI Problem Description Larkin has been to Yantai to take part in NOI 2010!众所周知(do you know ...

  10. Nginx工作机制

    Nginx分为单工作进程和多工作进程两种模式.通常采用1个master+多个worker进程配合异步非阻塞的工作机制.master进程主要负责管理自身和下属的worker进程,worker负责处理请求 ...