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成员删除掉

注意, 以上操作都是在内存中进行的. 并不会影响你的源代码

在操作的对象是模块的时候:

import gg #
# #
def dd():
    print(‘这就是我想改的 ‘)
setattr(gg,‘g4‘,dd)#将原来的函数修改为自动以的函数dd 》》类似于修改字典中的vaule
print(gg.g4())#调用的时候还是使用原来的方式进行调用

setattr(gg,‘name‘,‘我的天啊‘)#同理这是对模块中的变量的修改
print(gg.name)
delattr(gg,‘name‘) #同理这是对模块中的变量的删除
print(gg.name)
#都不影响源码,都是修改内存上的内容,

在对象中应用的时候用法基本相同,注意的是  创建的对象的属性都会存放在创建对象的开辟的内存位置,所有的方法会放在类的代码区,使用反射的时候对应进行使用就可以

class Car:
    def __init__(self,color):
        self.color = color

    def fly(self):
        print(‘我的车真的会飞‘)

gg = Car(‘黄色‘)
if hasattr(gg,‘color‘):#通过hasattr判断熟悉你是否存在
    print(getattr(gg,‘color‘)) #通过getattr获取属性的值
if not hasattr(Car,‘run‘):#当不存在某个方法的时候,可以通过setattr去新建(setattr:存在就是修改,不存在就自动新建)
    setattr(Car,‘run‘,lambda self,x:print(‘我的车还会跑%s‘%x))
    gg.run(‘啊‘)
if  hasattr(Car,‘fly‘):
    delattr(Car,‘fly‘)
if not  hasattr(Car,‘fly‘):
    print(‘fly 方法已经成功删除‘)

原文地址:https://www.cnblogs.com/vivi0403/p/9936465.html

时间: 2024-10-23 12:31:51

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

反射也叫路由系统,就是通过字符串的形式导入模块:通过字符串的形式去模块中寻找指定的函数,并执行,利用字符串的形式去对象(模块)中操作(查找.获取.删除.添加)成员,一种基于字符串的时间驱动. 获取:(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学习心得(六) 反射机制、装饰器

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