zoukankan      html  css  js  c++  java
  • Python的类反射机制

    反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数并执行。

    Python有四个内置函数:

    函数 功能
    getattr(object, attr[, default]) 获取指定字符串名称的对象属性或方法,如果对象有该属性则返回属性值,如果有该方法则返回该方法的内存地址,如果都没有就报错,如果指定了默认值找不到不会报错会取默认值
    hasattr(object, attr) 判断指定字符串名称的对象是否有该属性或方法,返回True或False
    setattr(object, attr, value) 为指定字符串名称的对象设置属性,如果对象已有该属性则覆盖属性值,如果没有该属性则新增属性并赋值
    delattr(object, attr) 删除指定字符串名称的对象的某属性,如果对象没有该属性会报错

    示例:

    class Demo:
    
        def __init__(self):
            self.name = 'abc'
    
        def method(self):
            pass
    
    
    # 实例化
    d = Demo()
    
    # 获取对象中的属性、方法
    name = getattr(d, 'name')
    func = getattr(d, 'method')
    print(name)
    print(func)
    print('
    ')
    
    # 查看是否有属性或方法
    print(hasattr(d, 'name'))
    print(hasattr(d, 'method'))
    print(hasattr(d, 'abc'))
    
    # 设置对象的属性值
    setattr(d, 'name', 'aaa')  # 已有的属性值会修改
    setattr(d, 'age', 10)  # 没有该属性会新增并赋值
    
    # 删除对象的属性
    delattr(d, 'name')
    
    

    输出结果:

    abc
    <bound method Demo.method of <__main__.Demo object at 0x00000000028A27F0>>
    
    True
    True
    False
    

    反射的使用

    demo1:

    # 导包
    time = __import__('time')
    # 获取方法
    sleep = getattr(time, 'sleep')
    # 调用
    sleep(5)
    

    等价于:

    # 1
    import time
    time.sleep(5)
    
    # 2
    from time import sleep
    sleep(5)
    

    demo2:

    # 导包
    webdriver = __import__('selenium.webdriver', fromlist=['webdriver'])
    # 实例化,获取方法
    driver = webdriver.Chrome()
    quit = getattr(driver, 'quit')
    # 调用方法
    quit()
    

    等价于:

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.quit()
    
  • 相关阅读:
    第03组 Beta冲刺(1/4)
    第03组 Alpha事后诸葛亮
    第03组 Alpha冲刺(4/4)
    第03组 Alpha冲刺(3/4)
    第03组 Alpha(2/4)
    第03组 Alpha冲刺(1/4)
    第03组团队Git现场编程实战
    第二次结对编程作业
    团队项目-需求分析报告
    第01组 Beta冲刺(3/5)
  • 原文地址:https://www.cnblogs.com/milesma/p/12095803.html
Copyright © 2011-2022 走看看