zoukankan      html  css  js  c++  java
  • 获取对象的信息之反射

    获取对象的信息之反射

    所谓反射,指的是以字符串额形式来操作(包括:增删改查)对象的属性和方法。

    1. hasattr(object, name)

      用于判断指定的对象object是否有参数name指定的属性和方法

    2. getattr(object, name[, default])

      用于获取指定的对象object中名为name的属性和方法

      如果不指定参数default,那么当object中不存在名为name的属性和方法时抛出AttributeError

      如果指定了参数default,那么当object中不存在名为name的属性和方法时就会返回default

      getattr(object, name)等价于:object.name

    3. setattr(object, name, value)

      用于在指定的对象object中添加或修改名为参数name的属性和方法,添加或修改后的值为value

      setattr(object, name, value)等价于object.name = value

    4. delattr(object, name)

      用于删除指定的对象object中名为参数name的属性或方法

      delattr(object, name)等价于:del object.name

      注意: 只有在不知道对象信息的情况下,才会去获取对象信息。因此,如果可以直接写:object.name,

      就不要写为getattr(object, 'name')。

      class Myclass(object):
          def __init__(self):
              self.x = 1
      
          def do_sth(self):
              print("do_sth被调用")
      
      mc = Myclass()
      
      print(hasattr(mc, 'x')) # True
      print(hasattr(mc, "do_sth")) # True
      print(hasattr(mc, 'y')) # False
      print(getattr(mc, 'x')) # 1
      f = getattr(mc, 'do_sth')
      f()
      # print(getattr(mc, 'y'))#AttributeError
      print(getattr(mc, 'y', 2))
      
      setattr(mc, 'z', 3)
      print(getattr(mc, 'z'))
      
      setattr(mc, 'z', 4)
      print(mc.z)
      
      delattr(mc, 'z')
      print(hasattr(mc, 'z'))
      
  • 相关阅读:
    第三发
    第二发
    第一发
    要看的算法
    haxe坑
    TCP/IP协议三次握手与四次握手流程解析(转)
    Android动态类生成预加载-dexmaker使用
    Java中ArrayList 、LinkList区别
    Java解析YAML和Android解析YAML
    Java sax、dom、pull解析xml
  • 原文地址:https://www.cnblogs.com/huanyinglvtuan/p/12670891.html
Copyright © 2011-2022 走看看