• day25_python_反射_getattr()方法_hasattr()方法_setattr()方法_delattr()方法


    #Author:'haijing'
    #date:2018/10/28

    # 在python中反射的执行效率还是很高的 反射:通过字符串的形式去操作对象中的成员
    #---------getattr(a,'b')方法 从a这个地方拿出b,其中b必须是字符串----------#
    # class Foo:
    # def __init__(self,name,age):
    # self.name = name
    # self.age = age
    # def show(self):
    # return '%s-%s' %(self.name,self.age) #%s为占位符
    #
    # obj = Foo('haijing',18)
    # v1 = obj.name #name是一个变量名 以变量的形式去拿obj中name的值
    # print(v1) #打印haijing
    #
    # v2 = getattr(obj,'name') #以字符串的形式去obj中拿name的值
    # print(v2) #打印haijing
    #
    # func = getattr(obj,'show') #以字符串的形式去拿类中的show()方法 此时func就是show()方法
    # r = func() #实际上是去执行show()函数
    # print(r) #打印haijing-18

    #-------hasattr(a,'b')方法 从a这个地方去检测有没有b,其中b必须是字符串 如果在a中有a则返回True-------#
    #---------setattr(a,'b','c') 向对象a中添加成员 a.b = c----------#
    #---------delattr(a,'b',) 删除对象a中添加成员成员b----------#
    # class Foo:
    # def __init__(self,name,age):
    # self.name = name
    # self.age = age
    # def show(self):
    # return '%s-%s' %(self.name,self.age) #%s为占位符
    #
    # obj = Foo('haijing',18)
    # print(hasattr(obj,'name')) #打印True
    #
    # setattr(obj,'k1','v1') #设置self.k1 = v1 存储在内存中
    # print(obj.k1) #打印v1
    #
    # delattr(obj,'name') #删除obj中的name变量
    # # obj.name #此时在这一句就会报错

    #---------通过类(Foo)+字符串去操作对象中的成员,Foo也是类type的对象----------#
    class Foo:
    stat = '123' #静态字段
    def __init__(self,name,age):
    self.name = name
    self.age = age
    #以前是这样去拿静态字段的值
    obj = Foo('haijing',18)
    print(obj.stat)
    #现在是这样去拿静态字段的值
    r = getattr(Foo,'stat') #通过字符串去操作对象中的成员,Foo也是type的对象啊
    print(r)

    #---------不同py文件之间的字符串去操作对象中的成员----------#

    reflection02.py中的内容为:
    name = 'haijing'

    def func():
    return 'func'

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

     #reflection01中的内容为:
    # import reflection02
    # r1 = getattr(reflection02,'name') #执行reflection02.py中的name='haijing'
    # print(r1) #打印haijing
    # r2 = getattr(reflection02,'func') #执行reflection02.py中的func()函数
    # print(r2()) #打印func
    # cls = getattr(reflection02,'Foo') #cls就等于reflection02.py中的Foo类
    # obj = cls('haijing',18) #obj就相当于reflection02.py中的Foo类的对象
    # print(obj.name)

    #---------------反射的小应用--------------#

    s2.py中的内容:
    #Author:'haijing'
    #date:2018/10/28

    def f1():
    return '首页'
    def f2():
    return '新闻'
    def f3():
    return '精华'
    s1.py中的内容:

    #以前 较麻烦
    #import s2
    # inp = input('请输入要查看的URL:')
    # if inp == 'f1':
    # s2.f1()
    # elif inp == 'f2':
    # s2.f2()
    # elif inp == 'f3':
    # s2.f3()

    #现在 用反射改进
    import s2
    inp = input('请输入要查看的URL:')

    if hasattr(s2,inp): #判断用户输入的是否在s2.py模块中有或没有,若有执行func,否则执行else
    func = getattr(s2, inp) # inp本身就是字符串
    result = func()
    print(result)
    else:
    print('404')

    haijing in HZ 新的一周要开始了~~
    2018.10.28 晚









  • 相关阅读:
    帝国cms 同个IP可提交一次
    帝国cms 图片相对路径绝对路径设置问题+帝国cms 手机端调用图片问题
    帝国CMS 手机版制作+帝国PC跳转到手机+重新定向
    帝国cms 相关问题
    简洁 清晰弹出层讲解制作(图片点击放大)
    webstorm 2016最新版破解+汉化
    ajax点击不断加载数据列表
    js中substr,substring,indexOf,lastIndexOf,split的用法
    Parallax.js|强大的javascript视觉差特效引擎
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9867751.html
Copyright © 2020-2023  润新知