反射

作者: Pope_Li | 来源:发表于2018-10-14 22:30 被阅读1次

    反射是什么

    使用字符串数据类型的变量名来获取这个比变量的值

    为什么要用反射

    三个反射应用场景

    1. input

      只能输入字符串类型,来获取字符串对应的变量名

    2. 文件

      从文件中读出的字符串,想转化成变量的名字

    3. 网络

      将网络传输的字符串转化成变量的名字

    怎么用

    hasattr

    getattr

    1.反射类 中的变量

    class Foo:
        school = 'oldboy'
        country = 'china'
        language = 'chinese'
    inp = input('>>>').strip()
    print(geattr(Foo,inp))
    

    geattr方法:

    getattr(变量名:命名空间,字符串:属于一个命名空间内的变量名)

    如何执行类中的方法:
    
    class Foo:
        school = 'oldboy'
        country = 'china'
        language = 'chinese'
        @classmethod
        def stat(cls):
            print(cls.school)
    
    

    2.反射对象中的变量

    • 对象属性
    • 普通方法

    3.反射模块中的变量

    import os#os就是一个模块
    os.rename()
    getattr(os,'rename')()
    

    4.反射本文件中的变量

    a=1
    b=2
    name = 'li'
    def abc():
        print('abc')
    import sys 
    print(sys.modules['__main__'])#本文件的命名空间
    print(sys.modules['__main__'].a)
    print(__name__)#内置变量
    print(sys.modules[__name__])#反射本文件中的变量,固定的使用这个命名空间
    getattr(sys.modules[__name__],'abc')()
    

    setattr

    setattr(Foo,'school','dfsdf')#向某个作用域添加某一个变量,接受三个参数,命名空间,'变量名',变量值)
    

    delattr

    class Foo:
        country='Chine'
    delattr(Foo,'country')
    

    __ str __ __ repr __

    不用调用这个方法就可以出发这个方法的执行

      class Foo:
            def __str__(self):
                return 'abcd'
            def __repr__(self):
                return 'dcba'
        obj = Foo()
        __str__ :
            print(obj)
            '%s'%obj
            str(obj)
        __repr__  : # 当使用会触发str方法的方式,但是Foo类内部又没有实现__str__方法的时候,都会调用__repr__
            '%r'%obj
            repr(obj)
    

    相关文章

      网友评论

        本文标题:反射

        本文链接:https://www.haomeiwen.com/subject/lzztzftx.html