Python ————反射机制

python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除成员。

# commons.py 文件

name = "nick"

def f1():
    return "This is f1."

def f2():
    return "This is f2."

def nb():
    return "This is niubily."

# index.py 文件
import commons

#根据字符串的形式去某个模块中寻找东西
target_func = getattr(commons,"f1")     # 找函数
result = target_func()
print(result)

target_func = getattr(commons,"name")   # 找全局变量
print(target_func)

target_func = getattr(commons,"age",None)   # 找不到返回None
print(target_func)

#根据字符串的形式去某个模块中判断东西是否存在
tarhas_func = hasattr(commons,"f5")     # 找函数
print("before:",tarhas_func)

# tarhas_func = hasattr(commons,"name") # 找全局变量
# print(tarhas_func)

#根据字符串的形式去某个模块中设置东西
setattr(commons,"f5","lambda x: return \"This is new func.\"")  # 设置一个函数
setattr(commons,"age",18)       # 设置全局变量

tarhas_func = hasattr(commons,"f5")     # 检查函数是否存在
print("after:",tarhas_func)

#根据字符串的形式去某个模块中删除东西
delattr(commons,"f5")       # 删除一个函数

tarhas_func = hasattr(commons,"f5")     # 检查函数是否存在
print("end:",tarhas_func)

对象实例

class Foo:
   def __init__(self,name,age):
       self.name=name
       self.age=age

   def show(self):
        print("获取到了该函数方法")

obj=Foo(‘2018世界杯‘,2018)
 #hasattr 是否存在字段
print(hasattr(obj,‘name‘))
#getattr获取信息
getname=getattr(obj,‘name‘)
print(getname)
#setattr赋值
setattr(obj,‘time‘,‘2018-6-16‘)
print(obj.time)
#delattr删除
delattr(obj,‘name‘)
print(obj.name)#删除后报错AttributeError: ‘Foo‘ object has no attribute ‘name‘

原文地址:https://www.cnblogs.com/lanyinhao/p/9197503.html

时间: 2024-08-08 23:01:07

Python ————反射机制的相关文章

Python 反射机制详解

本文和大家分享的主要是python反射机制相关内容,一起来看看吧,希望对大家学习python有所帮助. 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 1 def f1():2   print("f1是这个函数的名字!")3   4 s = "f1"

python反射机制深入分析

对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 def f1(): print("f1是这个函数的名字!") s = "f1" print("%s是个字符串" % s) 在上面的代码中,我们必须区分两个概念,f1和“f1".前者是函数f1的

python 反射机制在实际的应用场景讲解

剖析python语言中 "反射" 机制的本质和实际应用场景一. 前言 def s1(): print("s1是这个函数的名字!") s = "s1" print("%s是个字符串" % s) 在上面的代码中,我们必须区分两个概念,f1和"f1".前者是函数f1的函数名,后者只是一个叫"f1"的字符串,两者是不同的事物.我们可以用f1()的方式调用函数f1,但我们不能用"f1&q

python反射机制实现

笔者之前看到很多撸java的同事.老是说着反射机制什么的,然后就想想我大Python肯定也有反射机制的实现方法,于是就写了下面的一段python实现的反射机制代码: comm模块代码 1 def jk(): 2 name = 'huangsonghui' 3 print(name) 4 return {1,2,3} main模块代码: import commdef run(): inp = input('enter:') if hasattr(comm,inp): d = getattr(com

Python面试题之Python反射机制

0x00 前言 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): print('f4') a = 1 test.py import test as ss ss.f1() ss.f2() print(ss.a) 我们要导入另外一个模块,可以使用import.现在有这样的需求,我动态输入一个模块名,可以随时访问到导入模块中的方法或者变量,怎么做呢? imp = input(“请输入你想导入的模块名:

python 反射机制

反射也叫路由系统,就是通过字符串的形式导入模块:通过字符串的形式去模块中寻找指定的函数,并执行,利用字符串的形式去对象(模块)中操作(查找.获取.删除.添加)成员,一种基于字符串的时间驱动. 获取:(getattr:获取或执行对象中的对象) 1 class NameList(): 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 6 def Show(self): 7 print("My name is %s

python反射机制

关于反射, 其实一共有4个函数: 其中obj可以是模块或者是对象 hasattr(obj, str) 判断obj中是否包含str成员 getattr(obj,str) 从obj中获取str成员 setattr(obj, str, value) 把obj中的str成员设置成value. 注意. 这里的value可以是值, 也可以是函数或者方法 delattr(obj, str) 把obj中的str成员删除掉 注意, 以上操作都是在内存中进行的. 并不会影响你的源代码 在操作的对象是模块的时候: i

Python学习心得(六) 反射机制、装饰器

1.反射机制 #/usr/bin/env python # -*- coding:utf-8 -*- ''' Python反射机制的核心本质:利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动 通俗讲就是通过用户传入url的不同,调用不同的模块函数,好多比较流行的web框架都是通过反射的机制,根据url的不同指向不同的模块 getattr(),hasattr(),setattr(),delattr()对模块的修改都在内存中进行,并不会影响文件中的真实内容

python的反射机制

转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 1 2 3 4 5 def f1():     print("f1是这个函数的名字!") s = "