• python 反射


    1、反射:通过字符串形式,操作对象的属性

    2、方法:hasattr(),getattr(),setattr(),delattr()

    3、作用范围

    面向对象(对象、方法)

    模块(内置模块、自定义模块、反射自己的模块)

    4、hasattr()和getattr()最重要,也最常用,一般一起出现,称为夫妻档;setattr()和delattr()了解即可

    class Student:
        """
        1.tom是实例化的对象,反射:对象的属性、方法
        2.Student是类,反射:类的静态属性和类方法
        3.反射方法:获取的值要加(),有参数时,要添加参数
        4.hasattr()用于判断和getattr()可以看成夫妻档,一般成对出现
        """
        country = 'china'
    
        def __init__(self, name, grade):
            self.name = name
            self.grade = grade
    
        def info(self, new_grade):
            if self.grade < new_grade:
                return "恭喜"
            else:
                return "遗憾"
    
        @classmethod
        def coun(cls, new_country):
            Student.country = new_country
    
    
    tom = Student('tom', 70)
    if hasattr(tom, 'name'):        # 对象属性反射
        print(getattr(tom, 'name'))     # 结果:tom    
    
    if hasattr(tom, 'info'):
        ret = getattr(tom, 'info')      # 对象方法的反射
        print(ret(80))          # 结果:恭喜       
    
    if hasattr(Student, 'coun'):
        ret = getattr(Student, 'coun')      # 静态属性/类属性的反射
        ret('USA')
    
    if hasattr(Student, 'country'):     # 类方法的反射
        print(getattr(Student, 'country'))      # 结果:USA
    import sys
    """
    1.反射自己的模块,实质是.py文件命令、函数的反射
    2.sys.modules[__name__],获取当前文件对象
    3.python一切皆对象
    """
    name = 'tom'
    
    
    def output():
        return "Hello World!"
    
    
    # print(sys.modules[__name__])    # 获取当前文件,python一切皆对象
    if hasattr(sys.modules[__name__], 'name'): 
        print(getattr(sys.modules[__name__], 'name'))   # 结果:tom
    if hasattr(sys.modules[__name__], 'output'):
        ret = getattr(sys.modules[__name__], 'output')      #
        print(ret())       # 结果:Hello World!
    """
    1.setattr(),Sets the named attribute on the given object to the specified value
    2.delattr(), Deletes the named attribute from the given object.
    """
    
    
    class Test:
        def sb(self):
            return 'sb'
    
    
    t1 = Test()
    setattr(t1, 'name', 'china_lead')   # 设置对象t1的属性name和值china_lead
    if hasattr(t1, 'name'):
        print(getattr(t1, 'name'))      # 结果:china_lead
    try:
        delattr(t1, 'name')     # 通过反射删除对象的属性
        getattr(t1, 'name')
    except Exception as error:
        print('result: %s' % error)     # result: 'Test' object has no attribute 'name'
  • 相关阅读:
    其它运算符
    位运算符
    赋值运算符
    逻辑运算符
    关系运算符
    理解twisted中的reactor和deferred(一)
    修改 Django Administration
    celery 调用scrapy
    flower 时区设置
    Python 过滤HTML实体符号简易方法
  • 原文地址:https://www.cnblogs.com/wt7018/p/10946720.html
Copyright © 2020-2023  润新知