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)

  • 相关阅读:
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    leetcode刷题笔记 260题 只出现一次的数字 III
    leetcode刷题笔记 241题 为运算表达式设计优先级
    leetcode刷题笔记 258题 各位相加
    leetcode刷题笔记 257题 二叉树的所有路径
    leetcode刷题笔记 242题 有效的字母异位词
    leetcode刷题笔记 240题 搜索二维矩阵 II
  • 原文地址:https://www.cnblogs.com/merry-0131/p/11255983.html
Copyright © 2011-2022 走看看