zoukankan      html  css  js  c++  java
  • python之-- 反射

    反射定义:通过字符串映射或者修改程序运行时的状态,属性,方法。
    方法有如下4个:
    1:getattr(object,name,default=None):根据字符串去获取obj对象里的对应的方法的内存地址,如果是属性则会直接返回值。
    2:hasattr(object,name):判断对象object里是否存在name字符串的方法映射
    3:setattr(x,y,v) ==》 x.y = v :通过字符串设置新的属性(可以重设普通属性值,也可以将函数设置为类方法)
    4:delattr(x,y)
    举例:
     1 # 将这个方法动态装入类中进行调用
     2 def bulk(self):
     3     print('%s is yelling...' % self.name)
     4 
     5 class Dog(object):
     6     def __init__(self,name):
     7         self.name = name
     8     def eat(self,food):
     9         print('%s is eat %s' % (self.name,food))
    10 
    11 obj = Dog('沙皮')
    12 mess = input('请输入操作的方法:')
    13 if hasattr(obj,mess):
    14     #-----删除---
    15     #delattr(obj,mess) # 模拟传入name,删除name属性
    16     #print(obj.name)  # 报错提示没有name属性
    17     #-----以字符串打印方法值---
    18     # fun = getattr(obj,mess) # 这里将通过getattr得到talk方法的内存地址
    19     # fun('baba')
    20     #-----重置属性值---
    21     # setattr(obj,mess,'22')  # 这里可以重新修改已存在的属性值
    22     # print(getattr(obj,mess))
    23 else:
    24 
    25     #------设置将类外面的函数引入类中----
    26     # setattr(obj,mess,bulk) # 动态将bulk函数装入类中
    27     # getattr(obj,mess)(obj) # 动态使用getattr方法获取输入值,然后将obj对象本身当参数传入,因为上面的bulk函数有self参数。
    28 
    29     # -----设置动态传入属性
    30     setattr(obj,mess,22) # 设置默认属性值,
    31     print(getattr(obj,mess))  # 返回默认属性值22
    32     # 可以重新设置已存在的属性值
    View Code
  • 相关阅读:
    使用ajax和history.pushState无刷新改变页面URL
    转:js-sdk探索之微信网页分享
    DOM操作优化
    转:jQuery插件开发精品教程,让你的jQuery提升一个台阶
    转:关于垂直网格与CSS基线对其的探讨
    伪元素控制网页表单样式
    div模拟textarea
    给独立程序员の建议
    ReactiveCocoa / RxSwift 笔记一
    ReactiveCocoa 浅析
  • 原文地址:https://www.cnblogs.com/zy6103/p/6942012.html
Copyright © 2011-2022 走看看