python-hasattr()、getattr()、setattr()函数的使用
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()函数的使用的更多相关文章
- 【转】Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...
- 反射之hasattr() getattr() setattr() 函数
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断object中有没有一个name字符串对应的方法或属性,返回B ...
- python eval() hasattr() getattr() setattr() 函数使用方法详解
eval() 函数 --- 将字符串str当成有效的表达式来求值并返回计算结果. 语法:eval(source[, globals[, locals]]) ---> value 参数: sour ...
- Python hasattr,getattr,setattr,delattr
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # 反 ...
- hasattr() getattr() setattr() 函数使用详解??
hasattr(object, name)函数: 判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False. **注意:name要使用 ...
- Python标准库:内置函数hasattr() getattr() setattr() 函数使用方法详解
hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False.参数object是一个对象 ...
- Python的hasattr() getattr() setattr() 函数使用方法详解
hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...
- Python的hasattr() getattr() setattr() 函数使用方法详解 (转)
来自:https://www.cnblogs.com/cenyu/p/5713686.html hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOO ...
- Python的hasattr() getattr() setattr() 函数使用方法
hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 &g ...
- Python的hasattr() getattr() setattr() 函数使用方法详解--转载
hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...
随机推荐
- Selenium学习之==>WebDriver驱动对照表
转自www.imdsx.cn 1.Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对. chr ...
- tensorflow运行原理分析(源码)
tensorflow运行原理分析(源码) https://pan.baidu.com/s/1GJzQg0QgS93rfsqtIMURSA
- C# sqlite 无法识别的datetime格式 FromOADate
再读取不可控数据库datetime字段时,遇到了一个奇葩问题——“无法识别的datetime格式” 搞了半天…… 数据库里看:2017-06-06 10:28:30.000 不做处理查询报错:“无法识 ...
- oracle data guard --理论知识回顾01
之前搭建了rac到单实例的dg环境,最近又在windows下搭建了dg,这一篇关于dg的一些理论知识回顾 官方文档 https://docs.oracle.com/cd/E11882_01/nav/p ...
- JavaScript对象之--- RegExp
1.概述 正则表达式是描述字符模式的对象. 正则表达式用于对字符串模式匹配以及检索替换: 2.语法 前者为模式,后者为修饰符. var reg = new RegExp( "xyz" ...
- LeetCode.867-转置矩阵(Transpose Matrix)
这是悦乐书的第332次更新,第356篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第202题(顺位题号是867).给定矩阵A,返回A的转置. 矩阵的转置是在其主对角线上翻转 ...
- 五、Zabbix-自动注册
一.Zabbix Serber 1.进入动作界面 配置—>动作—>事件源—>自动注册—>创建动作 2.配置自动注册动作 1.配置动作 2.配置操作 Next step 添加成功 ...
- JGit、SvnKit - 版本提交日志(1)提取
1.相关开源jar包 1>使用JGIT访问git项目 2>使用SVNkit访问svn Git官方JGit使用教程指导 2.Git历史提交日志导出到文件 在项目根目录执行如下命令,将日志 ...
- LINUX之启动流程
(上图片转自一位高手所做) 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关 ...
- P1507NASA食物
这道题是一个01背包的延伸题,只要透彻理解了,就不难了. 这个题有两个T,一个是体积一个是质量,所以这时候我们必须要加一个for了,同时要优化空间(三维降二维),然后用f[j][k]来表示当体积为j, ...