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. C# 打印倒三角

    void test6(int num) { try { #region 方法1 int maxstar = (num - 1) * 2 + 1; string line = ""; ...

  2. 一个ETF基金经理的心路历程

    简介: 鹏华沪深300ETF拟任基金经理崔俊杰先生,金融工程专业管理学硕士,5年证券基金从业经验.2008年7月加盟鹏华基金管理有限公司,历任产品规划部产品设计师.量化投资部量化研究员,先后从事产品设 ...

  3. 【ABAP系列】SAP ABAP 控制ALV单元格编辑后获取新的数值

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 控制ALV单元 ...

  4. 操作系统(3)实验相关原理——bootloader启动uCore

    x86启动顺序 CS+EIP决定启动地址. CS部分后面又4个0,相当于是左移了4位.总之就是要让CS左移4位之后加上EIP来得到要跳转的地址. 0x7c00地方开始的512字节的内容就是bootlo ...

  5. springcloud(一)

    Spring Cloud是什么鬼? Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线. ...

  6. Js AJAX Event

    ;(function () { if ( typeof window.CustomEvent === "function" ) return false; function Cus ...

  7. [转帖]K8s集群安装--最新版 Kubernetes 1.14.1

    K8s集群安装--最新版 Kubernetes 1.14.1 http://www.cnblogs.com/jieky/p/10679998.html 原作者写的比较简单 大略流程和跳转的多一些 改天 ...

  8. Javascript原型介绍

    原型及原型链 原型基础概念 function Person () { this.name = 'John'; } var person = new Person(); Person.prototype ...

  9. Linux 最常用命令整理,建议收藏!

    Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境. linux不仅可以长时间的运行我们编写的程序代码,还 ...

  10. 程序员听到bug后的N种反应…

    程序员的世界里, 不止有代码, 还有bug,bug,bug- 当出现bug时, 程序员们的反应是怎样的呢? 作者:苏小喵,来源:小花小画(微信号:hua-little) - END - 推荐阅读: 1 ...