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)

  • 相关阅读:
    Git 生成 && 配置SSH key,配置多个SSH key
    Java异常处理机制:try...catch...的执行流程
    安防相机中的WDR技术
    静态库和动态库的编译链接和使用
    堆栈溢出检测机制
    使用vscode发布
    栈空间分配和栈对齐访问
    linux 查找文件夹下所有指定文件并重命名
    gdb使用小技巧-保存调试点现场
    mount共享文件夹出错,提示操作正在进行
  • 原文地址:https://www.cnblogs.com/merry-0131/p/11255983.html
Copyright © 2011-2022 走看看