Python动态调用函数与属性的三种实现方式

Dylan
Dylan
发布时间:2026-10-14| 2人浏览过
原创

本文详解Python中动态获取对象属性和方法的三种常用方式。重点解析getattr函数的使用,包括默认值处理及属性与方法同名时的优先级规则;同时展示通过__dict__直接访问属性字典的方法。通过具体代码示例,帮助开发者理解如何在运行时灵活操作对象成员。

使用getattr获取对象属性

在Python中,动态获取对象的属性是常见需求。第一种方法是利用内置函数 getattr(object, name, default=None)。该函数允许通过字符串名称安全地访问对象属性,若指定了default参数,当属性不存在时返回默认值而非抛出异常。


# -*- encoding=utf-8 -*-
class Test:
  def __init__(self):
    self.name = '莉莉'
    self.age = 18
if __name__ == '__main__':
  test = Test()
  name = getattr(test, 'name') # 获取属性
  print(name)
  age = getattr(test, 'age') # 获取属性
  print(age)
  none = getattr(test, 'none', 'none') # 获取不存在的属性,需要添加 default,否则抛异常
  print(none)

代码执行结果如下所示:

莉莉 18 none

使用getattr动态调用方法

除了获取属性,getattr同样适用于动态获取并调用对象的方法。通过传入方法名的字符串,可以获取方法对象,随后进行调用。这种方式实现了基于字符串名称的动态方法调用。


# -*- encoding=utf-8 -*-
class Test:
  def __init__(self):
    self.name = '莉莉'
    self.age = 18

  def get_name(self):
    print('年龄是:{}'.format(self.name))
    return self.name
if __name__ == '__main__':
  test = Test()
  get_name = getattr(test, 'get_name') # 获取方法
  print(get_name)
  get_name() # 调用方法

执行上述代码后,控制台输出如下:

<bound method Test.get_name of <__main__.Test object at 0x000000A6C234DF98>>

年龄是:莉莉

通过__dict__直接访问属性

第三种方式是利用对象的 __dict__ 属性。Python实例通常将属性存储在 __dict__ 字典中,通过直接访问该字典的键值,可以获取属性值。这种方法更底层,直接操作属性存储结构。


# -*- encoding=utf-8 -*-
class Test:
  def __init__(self):
    self.name = '莉莉'
    self.age = 18
if __name__ == '__main__':
  test = Test()
  name = test.__dict__['name']
  print(name)

运行上述代码后,输出结果为:

莉莉

需要注意的是,当类中定义的属性名与方法名相同时,使用 getattr() 函数会优先返回属性值,而非方法对象。这是Python解析成员访问时的默认行为,开发者在动态调用时需留意此优先级差异。

本文介绍了Python中动态访问对象成员的几种核心技巧,涵盖了getattr的安全调用机制及__dict__的直接访问方式。希望这些内容能帮助读者更好地掌握Python的动态特性,提升代码灵活性。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。