getattr()

作者: import_hello | 来源:发表于2018-08-09 16:37 被阅读0次

转载须注明出处:简书@Orca_J35

getattr(object, name[, default])

该函数属于反射操作,用于获取 object 中名为 name 的属性(name 是以字符串表示的属性名), getattr(x, 'foobar') 等效于 x.foobar。如果 object 中含有 name 属性,则返回该属性;如果 object 没有 name 属性,则返回 default(如果提供),否则抛出 AttributeError 异常。

对于字段属性,会直接返回值;对于方法属性,会返回其引用(通过引用可调用方法属性)。

class Cls:
    class_field = "类字段"

    def __init__(self):
        self.instance_field = "实例字段"

    def instance_method(self):
        print("实例方法")

    @staticmethod
    def static_method():
        print("静态方法")

    @classmethod
    def class_method(cls):
        print("类方法")


a_instance = Cls()
print("以下属性均可使用:", '\n',
      getattr(Cls, "class_field"), '\n',
      getattr(Cls, "static_method"), '\n',
      getattr(Cls, "class_method"), '\n',
      getattr(a_instance, "instance_field"), '\n',
      getattr(a_instance, "instance_method"))

print("存在default参数:", '\n',
      getattr(a_instance, "extra_field", "没有该属性!"), '\n',)

输出:

以下属性均可使用:
 类字段
 <function Cls.static_method at 0x000001CEBC5F6730>
 <bound method Cls.class_method of <class '__main__.Cls'>>
 实例字段
 <bound method Cls.instance_method of <__main__.Cls object at 0x000001CEBC5F9550>>

存在default参数:
 没有该属性!

相关文章

网友评论

      本文标题:getattr()

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