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

class A():
name = 'python'
def __init__(self):
setattr(self.__class__, 'func_class', self.func)
def func(self):
return 'Hello world:func'
@classmethod
def funcmethod(cls):
return 'Hello world:funcmethod' """
hasattr(object, name)
判断object对象中是否存在name属性,属性包含变量和方法;有则返回True,没有则返回False;
name为string类型
"""
print('hasattr==>')
print(hasattr(A, 'name')) #判断变量
print(hasattr(A, 'func')) #判断方法 """
getattr(object, name[, default])
获取object对象的name属性的值,如果存在则返回属性值,不存在需要给定值,否则报错
属性为方法时:1实例类,2加括号调方法
"""
print('getattr==>')
print(getattr(A, 'name')) #返回已定义属性值,再给定值也是无效
print(getattr(A, 'age', 20)) #返回未定义属性需要给定值,否则报错;不可在下次直接使用
print(getattr(A, 'func')) #返回函数对象
print(getattr(A(), 'func')()) #返回函数的返回值
print(getattr(A, 'funcmethod')()) #返回@classmethod函数的返回值 """
setattr(object, name, value) object为对象不是单纯的字符串
给object对象的name属性赋值,存在则修改,不存在则创建(可在同一个实例中直接使用)
"""
print('setattr==> name:{}'.format(getattr(A, 'name')))
setattr(A, 'name','shuzf') #修改变量值
setattr(A, 'age',30) #创建变量并赋值
print(getattr(A, 'name')) #返回已定义属性值
print(getattr(A, 'age')) #返回未定义属性 """
value为该对象方法时:获取name属性值,即获取方法;外部赋值方法为类静态方法,内部赋值不需要直接self.func
"""
setattr(A,'funcmethod_class',A.funcmethod) #创建变量并赋值方法
print(getattr(A,'func_class')()) #返回未定义属性值,内部赋值,值为方法
print(getattr(A,'funcmethod_class')()) #返回未定义属性值,外部赋值,值为方法 hasattr==>
True
True
getattr==>
python
20
<function A.func at 0x02C5D6F0>
Hello world:func
Hello world:funcmethod
setattr==> name:python
shuzf
30
Hello world:func
Hello world:funcmethod

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

import sys
class A:
def __init__(self, str):
self.name = str #name不为该类的属性
setattr(self.__class__, self.name, self.test) def test(self):
return sys._getframe().f_code.co_name if __name__ == '__main__':
a = A("shuzf") print(a.shuzf)
print(a.shuzf())
print(getattr(a,'shuzf'))
print(getattr(a, 'shuzf')()) setattr(a,'func',a.test)
print(a.func)
print(a.func())
print(getattr(a,'func'))
print(getattr(a,'func')())

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

A.name创建的属性可以多个实例相互使用,说明地址没有回收
setattr创建的属性只能同一个实例使用
class A():
def __init__(self):
setattr(self.__class__, 'func_class', self.func)
def func(self):
print(hasattr(self, 'name')) # 判断变量
A.name = 'python' #创建变量
#setattr(self, 'name','python')# 创建变量
print(getattr(self, 'name')) # 获取变量
return 'Hello world:func'
@classmethod
def funcmethod(cls):
return 'Hello world:funcmethod' print(getattr(A(), 'func')())
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. mysql 5.5 安装教程

    (转自:https://www.cnblogs.com/solargen/p/6835399.html) 1. 官网下载mysql5.5 下载地址: http://dev.mysql.com/down ...

  2. 以非root身份安装Python的Module或者Package以及pip安装指定路径

    因为要远程访问公司的服务器,没有sudo的权限,所以在安装python的一些包的时候就不能安去默认路径了(比如以/usr/local/lib/为prefix的路径). 一般来讲用easy_instal ...

  3. Django聚合数据

    背景: 有些时候,光靠数据库中已有字段的数据,还不足以满足一些特殊场景的需求,例如显示一个作者的所有书籍数量. 这时候就需要在已有数据基础上,聚合出这些没有的数据. 为查询集生产聚合: Django ...

  4. 【ABAP系列】SAP 面试 ABAPer的一些感想

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 面试 ABAPer的一些 ...

  5. 将python 2.6 升级到 2.7,及pip安装

    由于CentOS6.5 自带python版本为2.6.6,实际中使用的大多为2.7.x版本.于是手动升级. 查看python的版本 #python -VPython 2.6.6 1.下载Python- ...

  6. 一分钟安装mysql

    学数据库的人都知道,MySQL数据库是比较基本的掌握要求,不仅开源而且社区版本是免费使用的.由于工作上或者经常更换系统的原因,有时候会需要安装MySQL数据库.为了不至于每次安装都要查阅资料,现把安装 ...

  7. centos7安装nginx并配置前端环境

    服务器环境:CentOS Linux release 7.5.1804 (Core) 安装路径:/usr/local 1.安装编译工具以及库文件 (新服务器,未安装则需要先安装) # yum -y i ...

  8. Oracle SQL调优

    在多数情况下,Oracle使用索引t来更快地遍历表,优化器主要根据定义的索引来提高性能. 但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种 ...

  9. re库的使用

    re库的使用 精确匹配 如果直接给出字符,就是精确匹配.用\d可以匹配一个数字,\w可以匹配一个字母或数字 s1='00\d'#可以匹配'007',但是匹配不了'00A' s2='\d\d\d'#可以 ...

  10. W同学的新画板 QDUOJ 线段树 区间颜色段数

    W同学的新画板 QDUOJ 线段树 区间颜色段数 原题链接 题意 W同学在每天的刻苦学习完成功课之余,都会去找一些有趣的事情来放松自己:恰巧今天他收到了朋友送给他的一套画板,于是他立刻拆开了包装,拿出 ...