getattr()

转载须注明出处:简书@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参数:
 没有该属性!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容