isinstance
isinstance(obj, class_or_tuple) → bool
返回:如果 obj
是给定类或类型组合中的一个实例,则返回 True
,否则返回 False
obj
任意对象,Python 中的一切(包括自定义类实例、内建类型、函数、模块等)。class_or_tuple
可以是一个类型(class)或类型元组
(type1, type2, …)
。当传入元组时,如果
obj
属于元组中任一类型,结果即为True
getattr
getattr(object, name: str, default: Any = _marker) → Any
返回:对象
obj
的属性name
。三种情况:
如果
obj
有该属性(包括通过类或基类、描述符获取),返回其值;如果没有该属性且提供了
default
,则返回default
;否则抛出
AttributeError
。
2. 参数说明
object
:任意 Python 对象。name
:一个字符串,表示属性名。default
(可选):当属性不存在时返回的备选值
常见用法
class Foo:
def __init__(self):
self.x = 10
def greet(self):
return "hello"
f = Foo()
getattr(f, 'x') # 10
getattr(f, 'greet')() # "hello"
getattr(f, 'missing', 123) # 123 (提供了 default)
getattr(f, 'missing') # AttributeError
注意事项
hasattr
vs getattr(..., default)
hasattr(obj, name)
本质上相当于:
__getattribute__
的副作用
如果类重写了
__getattribute__
,那么任何一次属性访问都会走这个自定义钩子。在调试和读源码时要留意:
getattr
不见得是简单地查字典,还可能触发自定义逻辑。
关联对比:
评论