Python 内置函数:hasattr() 📅 发布时间:2026/9/8 14:54:12 👁 浏览次数: 于其中, 程序常常要去判别一个对象是不是涵盖某个属性, 径直访问的话兴许会引发出异常。然而, 内置函数给出了一种相较更为安全的办法, 用以查验对象有没有具备指定的那个属性或者方法, 这在反射机制、动态编程以及框架开发里是相当常用的。一、函数语法hasattr(object, name)参数必填要检查的对象。name必填表示属性或方法名称的字符串。返回值要是对象有这个属性, 那就返回True, 要是对象没有这个属性, 那就返回False。二、基础用法示例1、检查实例属性class Person: def __init__(self, name): self.name name p Person(Alice) print(hasattr(p, name)) # True print(hasattr(p, age)) # False2、检查方法是否存在class Greeter: def say_hi(self): return Hello! g Greeter() print(hasattr(g, say_hi)) # True print(hasattr(g, bye)) # False3、配合 () 使用class Person: def __init__(self, name): self.name name p Person(Alice) if hasattr(p, name): print(getattr(p, name))() 负责检查() 负责获取。三、进阶技巧1、动态属性检测在动态加载模块或类时可以先检查属性再使用import math if hasattr(math, sqrt): print(math.sqrt(16)) # 4.02、与 ()、() 配合class Config: pass cfg Config() setattr(cfg, debug, True) if hasattr(cfg, debug): print(cfg.debug) # True delattr(cfg, debug) print(hasattr(cfg, debug)) # False3、检查方法以实现接口风格编程def run(obj): if hasattr(obj, process): obj.process() else: print(对象未实现 process 方法)四、补充说明1、() 的检查范围能针对方法做检测, 能对数据属性予以检测, 对于动态生成的属性也可检测, 会针对对象自身当中的属性展开检查, 还会对该对象类继承链里的属性进行检查。2、工作机制在(obj, name)里面, 会试着去访问(obj, name), 要是可以成功访问到, 那就返回True, 若不然, 就返回False。因此它依赖于对象的 / 方法。3、副作用如果对象定义了 并包含副作用逻辑调用 () 也会触发。在某些情况下可能带来意外行为因此需要谨慎。4、反射机制连同、、一道共同构成了的反射机制, 去支撑运行时动态操作对象。在不确定对象是否有某个属性时优先用 () 做安全检查。但如果依赖属性存在性来分支逻辑说明设计可能需要优化。小结这般特性的情形下是其中特别运用于用以去查看检验有关目标到底具有这般一种属性或者是这样一种方法的函数, 最终反馈回归为布尔值这般的状态。它在很大程度上被广泛作用于应用在反射机制里面、动态编程以及接口式编程的具体情况之中。在此需要留意, 它能够引发对象的相关情况, 于施行运用之际应当规避那些不是刻意造成的附带影响。跟 ()、()、() 一块运用, 能够达成敏捷的动态属性操控。