反射 : 是用字符串类型的名字 去操作 变量

相比于用eval('print(name)') 留有 安全隐患

反射 就没有安全问题

hasattr 语法:

hasattr(object, name)
object可以是对象,类,模块,当前Py文件.
name是一个给字符串数据类型,可以是变量(属性),函数(方法)。
如果name在object中存在,则返回Ture,否则返回False。

getattr与hasattr语法相同,返回的结果是对应name的值或函数。

 反射对象的方法
a.func()
ret = getattr(a,'func')
ret() class A:
price = 20
@classmethod
def func(cls):
print('in func')
反射类的属性
A.price
print(getattr(A,'price')) 反射类的方法 :classmethod staticmethod
A.func()
if hasattr(A,'func'):
getattr(A,'func')() 模块
import my
反射模块的属性
print(my.day)
print(getattr(my,'day')) 反射模块的方法
getattr(my,'wahaha')() 内置模块也能用
time
asctime
import time
print(getattr(time,'time')())
print(getattr(time,'asctime')()) def qqxing():
print('qqxing')
year = 2018
import sys
print(sys.modules['__main__'].year)
反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year')) 反射自己模块中的函数
getattr(sys.modules['__main__'],'qqxing')()
变量名 = input('>>>')
print(getattr(sys.modules[__name__],变量名)) 要反射的函数有参数怎么办?
print(time.strftime('%Y-%m-%d %H:%M:S'))
print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S')) 一个模块中的类能不能反射得到
import my
print(getattr(my,'C')())
if hasattr(my,'name'):
getattr(my,'name')

注意:反射本py文件的name时

用sys.modules[__name__]取代sys.modules['__main__'],因为当别的文件把此py文件作为模块导入后__main__变为新的文件了,使用__name__变量则保证不会出现语法错误。



setattr() 语法:


setattr(object, name, value)
设置属性值

delattr 语法:

delattr(object, name)
删除一个属性。
 
 
 

python反射hasattr getattr setattr delattr的更多相关文章

  1. isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)

    6.23 自我总结 面向对象的高阶 1.isinstance/type/issubclass 1.type 显示对象的类,但是不会显示他的父类 2.isinstance 会显示的对象的类,也会去找对象 ...

  2. 反射hasattr; getattr; setattr; delattr

    hasattr(obj,name_str):#判断一个对象obj里面是否有对应的name_str字符串的方法,返回True或者Falsegetattr(obj,name_str):#根据字符串去获取对 ...

  3. python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类

    isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass  是python 中的内置函数,  用来一个类A是不是另外一个 ...

  4. 【转】Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...

  5. Python hasattr,getattr,setattr,delattr

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # 反 ...

  6. python -反射hasattr、setattr、delattr

    login.py #!/usr/bin/dev python# coding:utf-8 def index(): print u'欢迎访问xx网站首页' def login(): print u'登 ...

  7. hasattr getattr setattr delattr --> (反射)

    class Room: def __init__(self,name): self.name = name def big_room(self): print('bigroot') R = Room( ...

  8. python中hasattr, getattr,setattr及delattr四个方法

    通过一个实例来说明,这四个函数的用法: 首先一个如下的一个简单的类: class Animal(object): def __init__(self,name, zone): self.name = ...

  9. python动态函数hasattr,getattr,setattr,delattr

    hasattr(object,name) hasattr用来判断对象中是否有name属性或者name方法,如果有,染回true,否则返回false class attr():     def fun( ...

随机推荐

  1. arm9的中断

    GPIO 习惯了stm32的GPIO,发现高端处理器arm在这方面反而简单了. ARM9控制GPIO只有三种寄存器. GPxCON:配置引脚功能,GPACON用一位控制一个GPIO,分别是0为输出引脚 ...

  2. Python学习日记(十一) 内置函数

    什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...

  3. 【MySql】Explain笔记

    Explain -- 使用 Explain + SQL 分析执行计划: id:表示此表的执行优先级 id相同,表的执行顺序依次从上往下:                id不同,并且递增,id值越大执 ...

  4. The Essential Burp Suite

    OK   we have download teh burp suite .let's begin start the tool 1.if  we  want to use the total mem ...

  5. mysql 创建新用户 并赋予权限

    1.以管理员身份登录mysql mysql -u root -p 2.选择mysql数据库 use mysql 3.创建用户并设定密码 create user 'testuser'@'localhos ...

  6. 新添加的磁盘大于2T 的分区方法

    环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted   /dev/sdb 查看:(par ...

  7. SQL 执行 底层原理(一)

    一.SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询.包含三大组件: (1)命令解析器:检查语法和转换查询树. (2)查询执行器:优化查询. (3)查询优化器:负责执行查询. 2. ...

  8. [转]Linux网络 - 数据包的发送过程

    转, 原文:https://segmentfault.com/a/1190000008926093 -------------------------------------------------- ...

  9. 【转】MarkDown添加图片的三种方式

    原文:https://www.jianshu.com/p/280c6a6f2594 ----------------------------------------------------- 插图最基 ...

  10. vscode——设置自动保存

    前言 懒就一个字 步骤 打开设置第一项就是,选择焦点改变自动保存即可