• python之反射


    • getattr 获取指定字符串名称的对象属性
    • setattr 为对象设置一个对象
    • hasattr 判断对象是否有对应的对象(字符串)
    • delattr 删除指定属性

    1、getattr

    def getattr(object, name, default=None)
    
    • object:对象
    • name:字符串类型,表示对象的属性
    • default:如果name表示的属性在对象中不存在,默认会报错。如果设置了default,则不会报错而是返回default值
    class stu():
        name = 'abc'
        def set_name(n):
            self.name = n
    s = stu()
    print(getattr(s, 'name'))
    print(getattr(s, 'age', 20))
    set_name = getattr(s, 'set_name')
    set_name('ccc')	# 相当于调用方法
    

    2、setattr

    def setattr(x, y, v)
    
    • x表示对象,y表示属性名,v表示属性值
    • 并不会返回有返回值
    • 如果对象已经存在属性y,则相当于覆盖,如果不存在,则表示新增属性
    class stu():
        name = 'abc'
    s = stu()
    setattr(s, 'name', 22)
    setattr(s, 'age', 123)
    

    3、hasattr

    def hasattr(*args, **kwargs)
    
    • 判断是否具有属性或者方法,如果有则返回True,否则返回False
    class stu():
        name = 'abc'
        def set_name():
            pass
    s = stu()
    print(hasattr(s, 'name'))
    print(hasattr(s, 'age'))
    print(hasattr(s, 'set_name'))
    

    4、delattr

    def delattr(x, y)
    
    • x表示对象,y表示属性名
    • y不能为方法名或者不存在的属性名,或者会报错
    class stu():
        name = 'abc'
        def __init__(self, age):
            self.age = age
    s = stu(18)
    delattr(s,'age')
    print(hasattr(s, 'age'))
    
    • 注意,delattr只能删除对象的经过self调用的属性,否则会报错。
    • 即这里只能删除age而不能删除name

    5、动态导入模块

    import() 函数用于动态加载类和函数 。

    如果一个模块经常变化就可以使用 import() 来动态载入。

    import sys  
    __import__('a')        # 导入 a.py 模块
    
  • 相关阅读:
    js 判断表单是否为空和是否是有效数字
    jsp获取url路径的方法
    Table 'jiang.hibernate_sequence' doesn't exist
    Struts 2中的constant详解【转载】
    禁用ubuntu启用虚拟内存swap
    1
    Struts+Spring+Hibernate整合入门详解
    Posting JSON to Spring MVC Controller
    JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
    利用MAVEN打包时,如何包含更多的资源文件
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/16282799.html
Copyright © 2020-2023  润新知