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 and I‘m %d years old" %(self.name,self.age))
 8
 9 obj = NameList("Adair",18)
10 # obj.Show()
11 UserInput=input(">>>")
12 print(getattr(obj,UserInput))
13
14 >>>name
15 Adair
16
17 >>>age
18 18
19
20 >>>Show
21 <bound method NameList.Show of <__main__.NameList object at 0x000001F6CADEB358>>
 1 getattr 调用函数:
 2 class NameList():
 3     def __init__(self,name,age):
 4         self.name = name
 5         self.age = age
 6
 7     def Show(self):
 8         print("My name is %s and I‘m %d years old" %(self.name,self.age))
 9
10 obj = NameList("Adair",18)
11 # obj.Show()
12 UserInput=input(">>>")
13 Get = getattr(obj,UserInput)
14 Get()
15
16 >>>Show
17 My name is Adair and I‘m 18 years old

查找:(hasattr:判断方式是否存在与对象中)

 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 and I‘m %d years old" %(self.name,self.age))
 8
 9 obj = NameList("Adair",18)
10 UserInput=input(">>>")
11 print(hasattr(obj,UserInput))
12
13 >>>name
14 True
15
16 >>>Show
17 True
18
19 >>>Adair
20 False

添加/修改(setattr)

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

    def Show(self):
        print("My name is %s and I‘m %d years old" %(self.name,self.age))

obj = NameList("Adair",18)
InputKey=input(">>>")
InputValue=input(">>>")
New = setattr(obj,InputKey,InputValue)
print(getattr(obj,InputKey))

>>>salary
>>>100000
100000

>>>name
>>>xiaohei
xiaohei

删除:(delattr)

 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 and I‘m %d years old" %(self.name,self.age))
 8
 9 obj = NameList("Adair",18)
10 UserInput=input(">>>")
11 delattr(obj,UserInput)
12 print(hasattr(obj,UserInput))
13
14 >>>name
15 False

注:getattr,hasattr,setattr,delattr对模块的修改都在内存中进行,并不会影响文件中真实内容。

原文地址:https://www.cnblogs.com/Adairye/p/9643824.html

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

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 ————反射机制

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 ni

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 = "