Python反射机制详解:四个核心方法与动态特性应用

顾星河
顾星河
发布时间:2026-10-14| 3人浏览过
原创

本文深入解析Python反射机制,详细讲解hasattr、getattr、setattr和delattr四个核心方法的使用场景。通过实例演示如何动态检测属性、获取方法内存地址、绑定外部函数及删除成员,并阐述反射在实现可插拔机制和动态模块导入中的优势,帮助开发者掌握Python自省能力。

Python反射机制概述

前言:

此前在开发Python FTP服务器项目时,反射机制发挥了重要作用。为了巩固相关知识点,特此整理此笔记。

反射,亦称自省,是指程序在运行时检测并修改自身状态或行为的能力。

借助反射机制,Python能够利用字符串映射来动态调整程序运行时的状态及调用的方法。

反射的四个核心方法

Python中实现反射主要依赖四个内置函数:hasattr、getattr、setattr以及delattr。

hasattr用于判断指定名称的属性或方法是否存在于当前类或对象中。


class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交谈"%self.name)

p = Person("laowang")    
print(hasattr(p,"talk"))  # True。因为存在talk方法
print(hasattr(p,"name"))  # True。因为存在name变量
print(hasattr(p,"abc"))   # False。因为不存在abc方法或变量

getattr用于根据字符串参数获取对象中对应方法或变量的内存引用,若需执行该方法,只需在获取后加上括号调用即可。


class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交谈"%self.name)
p = Person("laowang")

n = getattr(p,"name")  # 获取name变量的内存地址
print(n)        # 此时打印的是:laowang

f = getattr(p,"talk")  # 获取talk方法的内存地址
f()           # 调用talk方法

我们发现getattr有三个参数,那么第三个参数是做什么用的呢?
s = getattr(p,"abc","not find")
print(s)        # 打印结果:not find。因为abc在对象p中找不到,本应该报错,但因为修改了找不到就输出not find

setattr允许将外部的函数或属性动态绑定到实例中,实现运行时修改对象结构。


def abc(self):
  print("%s正在交谈"%self.name)

class Person(object):
  def __init__(self,name):
    self.name = name

p = Person("laowang")
setattr(p,"talk",abc)  # 将abc函数添加到对象中p中,并命名为talk
p.talk(p)        # 调用talk方法,因为这是额外添加的方法,需手动传入对象


setattr(p,"age",30)   # 添加一个变量age,复制为30
print(p.age)      # 打印结果:30

delattr用于从实例或类中动态删除指定的属性或方法。


class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交谈"%self.name)

p = Person("laowang")

delattr(p,"name")    # 删除name变量
print(p.name)      # 此时将报错

反射机制的应用价值

探讨使用反射机制的原因及其实际价值。

反射带来的主要优势之一:

实现可插拔架构设计。

通过预先定义好接口,接口逻辑仅在具体实现完成后才被触发执行,这种机制实现了即插即用的功能,本质上属于一种“后期绑定”策略。

反射带来的另一主要优势:

支持动态导入模块,这基于对当前模块成员的反射检查来实现。

以上即为对Python反射机制的总结,如需了解更多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 算法库。