getattr
函数解析
getattr
是 Python 内置函数,用于动态获取对象的属性或方法。它提供了灵活的方式来访问对象的成员,而无需在代码中硬编码属性名或方法名。以下是 getattr
的详细解析:
语法
getattr(object, attribute[, default])
object
: 要从中获取属性的对象。attribute
: 属性名(字符串形式),可以是普通属性或方法名。default
(可选): 如果指定的属性不存在,则返回默认值。如果不提供且属性不存在,会抛出AttributeError
。
功能
- 动态获取属性或方法:可以根据字符串名称动态获取对象的属性或方法。
- 避免硬编码:使代码更加灵活和复用性更高。
- 处理缺失属性:通过提供默认值来优雅地处理缺失的属性或方法。
示例
假设有一个类 MiniApp
,其中包含一个方法 current_page_method
和一个属性 page_title
:
class MiniApp:
page_title = "Home Page"
def current_page_method(self):
print("Current page method called")
mini = MiniApp()
method_name = "current_page_method"
attr_name = "page_title"
# 获取并调用方法
getattr(mini, method_name)() # 输出: Current page method called
# 获取属性
title = getattr(mini, attr_name)
print(title) # 输出: Home Page
# 处理不存在的属性
missing_attr = getattr(mini, 'non_existent_attr', 'Default Value')
print(missing_attr) # 输出: Default Value
结合代码片段
代码:
getattr(self.mini.native, 'hook_current_page_method')()
这行代码的作用是从 self.mini.native
对象中获取名为 hook_current_page_method
的方法,并立即调用它。如果该方法不存在且未提供默认值,会抛出 AttributeError
。
注意事项
-
确保属性存在:如果不确定属性是否存在,可以提供默认值来避免异常。
method = getattr(self.mini.native, 'hook_current_page_method', None) if callable(method): method() else: print("Method not found or not callable")
-
检查返回值是否可调用:当获取的是方法时,确保返回值是可调用的(即是一个函数或方法对象)。