• Python学习系列之反射


    反射的定义

    根据字符串的形式去某个对象中操作成员

    1. 根据字符串的形式去某个对象中寻找成员
    2. 根据字符串的形式去某个对象中设置成员
    3. 根据字符串的形式去某个对象中删除成员
    4. 根据字符串的形式去某个对象中判断成员是否存在

    反射相关函数

    getattr(object,name,[default])

    获取一个对象的属性或者方法,如果存在就打印出来,如果不存在就打印出默认值,默认值是可选的

    注意:返回的对象方法,返回的是内存地址,如果需要执行这个方法,需要在后面加上括号'()'

    >>> class test():
     ...     name="xiaohua"
     ...     def run(self):
     ...             return "HelloWord"
     ...
    
     >>> t=test()           #实例化这个类
     >>> getattr(t, "name") #获取name属性,存在就打印出来。
     'xiaohua'
    
    
     >>> getattr(t, "run")        #获取run方法,存在就打印出方法的内存地址。
    <bound method test.run of <__main__.test instance at 0x0269C878>>
    
    >>> func = getattr(t, "run")  #获取run方法,加个括号就可以执行这个方法
    >>> func()
    'HelloWord'
    
    
    >>> getattr(t, "age")       #获取一个不存在的属性,就报错
    Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
    AttributeError: test instance has no attribute 'age'
    >>> getattr(t, "age","18")  #若属性不存在,返回一个默认值。
    '18'

    setattr(object,name,value)

    给对象的属性赋值,若属性不存在,就先创建在赋值

     1 >>> class test():
     2 ...     name="xiaohua"
     3 ...     def run(self):
     4 ...             return "HelloWord"
     5 ...
     6 >>> t=test()
     7 >>> hasattr(t, "age")   #判断属性是否存在
     8 False
     
     9 >>> setattr(t, "age", "18")   #为属相赋值,并没有返回值
    10 >>> hasattr(t, "age")    #属性存在了
    11 True
    12 >>>

    delattr(object,name)

    根据字符串的形式去某个对象中删除成员

    >>> getattr(commons, "Name")
    'ZhaiJunMing'
    >>> delattr(commons, "Name")
    # 获取不到就报错
    >>> getattr(commons, "Name")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: module 'commons' has no attribute 'Name'

    hasattr(object,name)

    根据字符串的形式去某个对象中判断成员是否存在

    比如:判断一个对象里面是否有name属性或者name方法,返回bool值,有则True,否则False

    1 >>> class test():
     2 ...     name="xiaohua"
     3 ...     def run(self):
     4 ...             return "HelloWord"
     5 ...
    
    
     6 >>> t=test()
     7 >>> hasattr(t, "name") #判断对象有name属性
     8 True
     
     9 >>> hasattr(t, "run")  #判断对象有run方法
    10 True
    11 >>>
  • 相关阅读:
    数据库如何部署上线阅读总结
    Nginx解决防盗链,服务器宕机,跨域,防DDOS
    跨域和表单重复提交
    Socet
    Redis发布订阅
    MySQL和Oracle的区别
    Redis事务、持久化、发布订阅
    Redis主从复制和哨兵模式
    Idea中使用Redis的Java客户端和Jedis
    Redis介绍及命令
  • 原文地址:https://www.cnblogs.com/chadiandianwenrou/p/6159850.html
Copyright © 2020-2023  润新知