码迷,mamicode.com
首页 > 编程语言 > 详细

python反射机制

时间:2018-11-09 18:21:35      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:相同   关于   内容   基本   判断   val   调用   设置   方法   

关于反射, 其实一共有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 方法已经成功删除)

 

python反射机制

标签:相同   关于   内容   基本   判断   val   调用   设置   方法   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!