zoukankan      html  css  js  c++  java
  • python之反射

    一、下列方法适用于类和对象

    1.hasattr(object,name)

    判断对象object中有没有name对应的方法或者属性    ##注意点name在括号中类型应为字符串类型

    class A:
    
        def __init__(self, age):
            self.age = age
            print(age)
    
        def put_name(self):
            print('aa')
    
    
    B = A('21')
    
    a = hasattr(B, 'put_name')
    b = hasattr(B, 'age')
    print(a)
    print(b)
    
    
    输出为:
    21
    True
    True

    2.getattr(object, name, default=None) 

    得到对象object中name对应的方法或者属性

    class A:
    
        def __init__(self, age):
            self.age = age
            print(age)
    
        def put_name(self):
            print('aa')
    
    
    B = A('21')
    
    
    a = getattr(B, 'put_name')
    print(type(a))
    b = getattr(B, 'put_name')()
    
    
    d = getattr(B, 'age')
    print(d)
    print(type(d))
    
    
    输出内容;
    21 
    <class 'method'>
    aa #执行put_name这个方法
    21 #得到了age这个属性
    <class 'str'>

    3.setattr(object,attr,value)

    创建object的新属性value

    class A:
    
        def __init__(self, age):
            self.age = age
            print(age)
    
        def put_name(self):
            print('aa')
    
    
    B = A('21')
    
    setattr(B, 'name', 'sb') #name 是对象的属性,'sb' 是属性的值
    print(B.name)
    
    
    输出为:
    21
    sb

    delattr(object,x)

    将object中的属性删除

    class A:
    
        def __init__(self, age):
            self.age = age
            print(age)
    
        def put_name(self):
            print('aa')
    
    
    B = A('21')
    
    setattr(B, 'name', 'sb') #name 是对象的属性,'sb' 是属性的值
    print(B.name)
    delattr(B, 'name')
    print(B.__dict__)
    
    
    
    
    输出:
    21
    sb
    {'age': '21'} #属性中只剩下age

    二.当前模块和不同模块之间的反射

    1.反射当前模块的对象

    import sys
    
    
    def s1():
        print('s1')
    
    
    def s2():
        print('s2')
    
    
    this_module = sys.modules[__name__]
    
    print(hasattr(this_module, 's1'))
    print(getattr(this_module, 's2'))
    
    
    
    输出:
    True
    <function s2 at 0x100e110d0>

    2.反射其他模块的方法或类

    文件 a.py
    import sys
    
    class A:
        def __init__(self, name):
            self.name = name
            pass
        def s1(self):
            print('s1')
    
    
        def s2(self):
            print('s2')
    
    在同目录的b.py文件下
    
    import a as fix
    
    print(hasattr(fix, 'A'))
    
    a = getattr(fix, 'A')('gao')
    
    
    print(a.name)
    
    
    
    输出:
    <class 'a.A'>
    True
    gao
  • 相关阅读:
    C# ViewState
    ASP.NET C#中Application Session 的用法
    JS取 Input 控件值方法
    JS通过HTML标签自身属性获取属性值
    SQLServer 数据库操作
    查看和修改 Windows 实例远程桌面默认端口
    只能输入数字0-9 正则表达式,兼容Google Firefox IE浏览器
    C# 类初始化顺序
    window系统 任务计划程序
    微信公众号开发--消息接收与回复
  • 原文地址:https://www.cnblogs.com/huizaia/p/9561099.html
Copyright © 2011-2022 走看看