zoukankan      html  css  js  c++  java
  • 反射的4个方法


    getattr() 指定一个方法名字,获取该方法的内存地址
    hasattr() 判断一个方法是否存在于实例中
    setattr() 设置或者添加方法
    delattr() 删除方法
    1、 getattr(obj, name) obj就是类的实例化(如果是调用函数的话,obj就是函数所在的包名), name就是方法名,需要注意方法名必须用引号引起来
    2、备注: test0622中包含有f1 f2 f3三个函数,及person类,person类中有一个方法info

    下边是练习

    # coding utf-8
    import test0622

    # 调用test0622模块中的函数f3, 注意getattr的第一个参数是模块名,第二个参数是函数名,但是函数名需要以字符串的形式来传参
    test1 = getattr(test0622, 'f3')
    test1()

    # 如何找到person类中的info方法,并且调用它(用反射的方法)
    # 第一步类的是实例化
    obj = test0622.Person()
    # 判断person类中是否有info方法,如果找到就执行,如果没找到,输出未找到info
    if hasattr(obj, 'info'):
    f = getattr(obj, 'info')
    f()
    else:
    print("未找到info")

    # 设置或者添加类的内容
    # 第一步类的是实例化
    # 注意必须先实例化,如果直接写setattr(test0622.Person(), 'exit', 'this is exit method')会报错
    # obj = test0622.Person() 上边已经有过实例化了,这个就不再写一次了
    setattr(obj, 'exit', 'this is exit method')
    # 第二步判断类里边是否有exit方法,hasattr返回true表示有,false表示无,exit并不会写入到person类,只是能调通
    f = hasattr(obj, 'exit')
    print(f)

    # next学习下delattr
    delattr(obj, 'exit')
    f1 = hasattr(obj, 'exit')
    # 输出false表示删除成功
    print(f1)

  • 相关阅读:
    Android编译选项eng、user、userdebug的区别
    Linux 内核编码规范
    PLM之EVT、DVT、PVT、MP
    fastboot刷机的一般方法
    Android手机拨号测试项
    使用Genymotion安装APK出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE的解决办法
    三星手机列表拖动时出现诡异背景色的问题
    分享android ADT百度云盘下载地址
    关于互联网思维
    分享Nginx在Windows下的管理命令(bat文件)
  • 原文地址:https://www.cnblogs.com/merry-0131/p/11255983.html
Copyright © 2011-2022 走看看