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

初识python: 反射

时间:2019-08-28 12:40:40      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:赋值   hid   原来   用户   str   splay   一个   closed   event   

 

反射:通过字符串映射或修改程序运行时的状态、属性、方法

反射有以下三个方法:

hasattr(object, name)           判断一个对象(object)里是否有对应的字符串(name)的属性
getattr(object, name)            根据字符串(name)去获取对象(object)里的,对应方法的内存地址(即,获取对应的方法)
setattr(object, name,value)   给对象(object)添加属性(name)值(value)
delattr(object,name)             删除对象的属性

实例:

技术图片
def sleep(self):
    print(%s在睡觉 % self.name)

def talk():
    print(说话)

class People(object):
    sex = 
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(%s正在吃东西 % self.name)

p = People(simple)

print(hasattr(p, eat))  # 返回True  # 判断p这个对象中是否有eat这个属性。
print(hasattr(p, name))  # 返回True
f = getattr(p, eat)  # 获取eat的内存地址,即,获取eat方法
print(f)  # 打印eat的内存地址
print(f())  # 打印eat的返回值,即,执行eat方法


# 变量操作
str = input(变量:).strip()
val = input(变量的值:).strip()
if hasattr(p, str):  # 在p中是否存在str变量,str是用户传入的参数。如果存在,则执行以下操作。
    func = getattr(p, str)  # 获取p中str变量
    print(原来的变量:%s=%s%(str,func))
    setattr(p,func,val)  # 修改p中str变量的值
    f = getattr(p,func)  # 重新获取p中str变量
    print(修改后的变量:%s=%s%(str,val)) # 打印str的值
else:  # 在p中不存在str变量,执行以下操作。
    setattr(p,str,val)  # 给p添加变量str,并赋值val --> str = val
    gv = getattr(p,str)  # 获取p中新添加的str变量
    print(新增了变量:%s=%s%(str,gv))  # 打印新添加的str变量值
    delattr(p, str)  # 删除变量
    print(删除了变量:%s % str)  # 删除p中str变量
    print(是否还存在变量%s:%s%(str,hasattr(p,str)))  # 删除之后,再判断属性是否存在
变量操作

执行结果:

技术图片

 

技术图片
def sleep(self):
    print(%s在睡觉 % self.name)

def talk():
    print(说话)

class People(object):
    sex = 
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(%s正在吃东西 % self.name)

p = People(simple)

print(hasattr(p, eat))  # 返回True  # 判断p这个对象中是否有eat这个属性。
print(hasattr(p, name))  # 返回True
f = getattr(p, eat)  # 获取eat的内存地址,即,获取eat方法
print(f)  # 打印eat的内存地址
print(f())  # 打印eat的返回值,即,执行eat方法

# 方法操作
str = input(方法:).strip()
if hasattr(p, str):  # 在p中是否存在str方法,str是用户传入的参数。如果存在,则执行以下操作。
    func = getattr(p, str)  # 获取p中str方法
    print(方法%s执行结果:%(str),end=‘‘)
    func()  # 执行方法
else:  # 在p中不存在str方法,执行以下操作。
    # setattr(p,str,sleep)  # 给p添加了类方法sleep,带self参数
    setattr(p,str,talk)  # 给p添加方法talk,不带self参数

    # sleep = getattr(p,str)  # 获取p中新添加的str方法的内存地址
    talk = getattr(p,str)

    print(新增了方法:%s,返回结果:%str)  # 打印新添加的str变量值

    # sleep(p)  # 类方法调用,带self
    talk() # 普通方法调用,不带self

    delattr(p, str)  # 删除方法
    print(删除了方法:%s % str)  # 删除p中str变量
    print(是否还存在变量%s:%s%(str,hasattr(p,str)))  # 删除之后,再判断属性是否存在
方法操作

执行结果:

技术图片

 

初识python: 反射

标签:赋值   hid   原来   用户   str   splay   一个   closed   event   

原文地址:https://www.cnblogs.com/simple-li/p/11423116.html

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