Python反射机制与单例模式详解

季宁
季宁
发布时间:2026-10-13| 5人浏览过
原创

本文深入解析Python中的反射机制与单例模式。反射允许程序通过字符串动态访问、检测和修改对象状态,涵盖getattr、hasattr、setattr和delattr四大核心函数。单例模式确保类仅有一个实例,有效节约内存。文章结合具体代码示例,展示如何在Python中实现这两种关键技术,适用于希望优化代码结构与资源管理的开发者。

Python反射机制与单例模式概述

反射

反射机制详解

什么是反射?

反射主要指程序具备访问、检测及修改自身状态或行为的能力,这种能力在编程中常被称为自省(introspection)。

面向对象中的反射

在面向对象编程中,反射允许我们通过字符串形式来操作对象中的成员,包括获取、检查、增加和删除属性或方法。

在Python中,一切事物皆对象,因此反射机制可以应用于所有类型的对象。

Python提供了四个主要的自省函数来实现反射功能:

- getattr():用于获取对象的属性值。

- hasattr():用于判断对象是否拥有特定的属性或方法。

- setattr():用于设置对象的属性值。

- delattr(obj, 'gender'):用于删除对象的指定属性。


class Info:
 
   def __init__(self,name,age,gender):
     self.name = name
     self.age = age
     self.gender = gender
   def show(self):
     return '%s - %s' %(self.name,self.age)
 
obj = Info('alex','20','男')
 
b = 'name'
print(obj.__dict__[b])
print(obj.__dict__['name'])
 
#getattr()
inp = input('请输入想要获取的内容:')
v = getattr(obj,inp)
print(v)
 
func = getattr(obj,'show')
v = func()
print(v)
 
#hasattr()
print(hasattr(obj,'name'))
 
#setattr()
setattr(obj,'k1','v1')
 
#delattr(obj,'gender')
obj.gender # 此时报错,Info类中的gender对象已被删除

除了实例对象,反射同样适用于类对象本身,允许动态访问类的静态字段、普通方法和静态方法。


class Info(object):
  staticField = "Hello World!"
 
  def __init__(self):
    self.name = 'mike'
 
  def func(self):
    return 'func'
 
  @staticmethod
  def bar():
    return 'bar'
 
print(getattr(Info, 'staticField'))
print(getattr(Info, 'func'))  # 返回函数的内存地址
print(getattr(Info, 'bar'))  # 返回函数的内存地址
 

单例模式实现

单例模式

什么是单例模式?

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心目的是确保某一个类在整个系统中只有一个实例存在。

当系统要求某个类只能有一个实例时,单例模式便发挥关键作用,例如数据库连接池或配置管理器。

单例模式保证始终使用同一份实例(对象),从而有效节约内存资源,避免重复创建对象带来的开销。

实现单例模式:


class Info:
  __v = None
 
  @classmethod
  def get_instance(cls):
    if cls.__v:
      return cls.__v
    else:
      cls.__v = Info()
      return cls.__v
 
obj1 = Info.get_instance()
print(obj1)
obj2 = Info.get_instance()
print(obj2)

以上所述是小编给大家介绍的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 算法库。