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. MAVEN打包时跳过Junit测试

    我们知道,通常情况下使用maven package命令打包时,会自动执行test包下的各个单元测试. 这是因为spring-boot-maven-plugin插件已经集成了maven-surefire ...

  2. ES 集群管理(集群规划、集群搭建、集群管理)

    一.集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个 ...

  3. Linux 系统安装 python

    Centos 7 Centos 7 安装 python3 (不要卸载python2 因为yum 要用) https://phoenixnap.com/kb/how-to-install-python- ...

  4. 【Linux开发】CCS远程调试ARM,AM4378

    注意一点:CCS也是安装在Linux主机上的,不是安装在Windows上的,我在Windows上做出了很多尝试,但最终也不没明白究竟要用怎样的格式去执行在ARM-Linux应用程序,out文件ELF可 ...

  5. 剑指Offer编程题(Java实现)——链表中环的入口结点

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 思路一 迭代遍历链表,利用HashSet将每个结点添加到哈希表中,如果添加失败(重复遍历了这个结点即遇到环),输出 ...

  6. IDEA在resources下创建多级目录

    在resource下,创建多级目录,应在每个目录之间用"/"隔开,这样就不需要再手动一层层目录的分别添加了!

  7. P1012拼数

    这是一道字符串的普及—的题. 输入几组数字,怎样组合起来才可以使最后结果最大.一开始这道题类似于那道删数问题,每次删除递增序列的最后一位,达到最小.而这个题我也是想到了贪心做法,于是想逐位判断,让在前 ...

  8. 0ctf 2017 kernel pwn knote write up

    UAF due to using hlist_add_behind() without checking. There is a pair locker(mutex_lock) at delete_n ...

  9. 6-2 如何读写json数据

    通过查看help(json.dump)和help(json.dumps)帮助信息,dump是将转换格式到文件对象,而dumps转换格式到字符串. 一.Json.dumps() Json.dumps() ...

  10. 通过编写串口助手工具学习MFC过程——(九)自动识别串口的方法

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...