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 ...
随机推荐
- 使用python脚本部署mariadb主从架构
环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. grant all on *.* to root@'%' iden ...
- 《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 ...
- JavaScript —— 实现简单计算器【带有 开/关机 清零 退格 功能】
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- jmap -heap命令用法
用jmap -heap命令可以查看linux堆内存分布 具体用法 1:先查出tomcat的进程号 例如: 然后执行 jmap -heap 7095 可以打印出整体的堆信息 可以看到经过分配的存活区 ...
- IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa
inet_pton NAME inet_pton - 将 IPv4 和 IPv6 地址从点分十进制转换为二进制 SYNOPSIS #include <arpa/inet.h> in ...
- Mybatis-学习笔记(8)常用的注解
1.常用的注解. 2.@insert.@delete.@update.@select完成常见的CRUD操作. import java.util.List; import org.apache.ibat ...
- vue组件命名和传值
一.vue组件命名: 组件有好几种命名方式, 可以使用 component-vue (短横线分隔命名).componentVue (驼峰式命名) 或ComponentVue (单词首字母) 因为h ...
- 【错误】jsp查询字符串中空格导致的异常问题!
jsp中查询字符串中空格问题 jsp中查询字符串中参数名的等号右边最好不要出现空格,因为编译器会把他当做是参数值得一部分. 例如: <a href="adjust.jsp?number ...
- Larkin’s NOI
Larkin’s NOI Problem Description Larkin has been to Yantai to take part in NOI 2010!众所周知(do you know ...
- Nginx工作机制
Nginx分为单工作进程和多工作进程两种模式.通常采用1个master+多个worker进程配合异步非阻塞的工作机制.master进程主要负责管理自身和下属的worker进程,worker负责处理请求 ...