当前位置: 首页 > news >正文

Python自省(机制与函数)

Python 自省(Introspection)是一种强大的特性,它允许程序在运行时检查对象的类型、属性以及它们如何相互关联。这种能力让 Python 非常适合于快速开发、调试以及编写需要高度动态交互的代码。Python 的自省机制主要通过内置的函数和类型来实现,以下是一些关键的机制和函数:

1. type() 函数

type() 函数是最基本的自省函数之一,它用于获取对象的类型。例如:

x = 5  
print(type(x))  # 输出: <class 'int'>  y = "hello"  
print(type(y))  # 输出: <class 'str'>

2. dir() 函数

dir() 函数用于获取一个对象的所有属性和方法的列表。这对于了解对象提供了哪些功能特别有用。

print(dir(list))  # 列出 list 类型的所有属性和方法  my_list = [1, 2, 3]  
print(dir(my_list))  # 列出 my_list 实例的所有属性和方法,包括继承自 list 的

3. getattr(), setattr(), 和 hasattr() 函数

这三个函数用于在运行时动态地获取、设置和检查对象的属性。

  • getattr(object, name[, default]):获取对象名为 name 的属性,如果属性不存在,则返回 default(如果提供了的话)。
  • setattr(object, name, value):设置对象名为 name 的属性值为 value
  • hasattr(object, name):检查对象是否有名为 name 的属性,并返回布尔值。
    class MyClass:  def __init__(self):  self.x = 10  obj = MyClass()  
    print(getattr(obj, 'x'))  # 输出: 10  
    setattr(obj, 'y', 20)  
    print(obj.y)  # 输出: 20  
    print(hasattr(obj, 'z'))  # 输出: False

    4. __dict__ 属性

    大多数 Python 对象都有一个 __dict__ 属性,它是一个字典,存储了对象的属性。通过访问这个属性,可以直接查看或修改对象的属性。

    class MyClass:  def __init__(self):  self.a = 1  obj = MyClass()  
    print(obj.__dict__)  # 输出: {'a': 1}  obj.__dict__['b'] = 2  
    print(obj.b)  # 输出: 2

    5. help() 函数

    虽然 help() 函数不是直接用于自省对象本身的,但它对于理解 Python 中对象(包括模块、函数、类等)的功能和用法非常有用。help() 提供了一个交互式界面,或者可以将信息打印到标准输出中。

    help(list)  # 显示关于 list 类的帮助信息

    Python 的这些自省机制和函数极大地增强了其灵活性和动态性,使得开发者能够编写出更加灵活和强大的代码。

http://www.lryc.cn/news/425784.html

相关文章:

  • 【JavaEE】JVM 内存区域划分,以及 Java 垃圾回收机制引用计数器,可达性分析等
  • Web开发:C# MVC + Session机制实现授权免登录demo
  • 【Qt】QWidget的font属性
  • 每天一个数据分析题(四百八十五)- 统计推断
  • 基于STM32的农业病虫害检测检测系统:OpenCV、MQTT、Flask框架、MySQL(代码示例)
  • 算法日记day 39(动归之打家劫舍)
  • Vue 生命周期详解含demo、面试常问问题案例
  • 表单自定义规则的校验
  • JVM 有哪些垃圾回收算法(回收机制)?
  • 2024年高教社杯数学建模国赛A题思路解析+代码+论文
  • Linux中yum、vim、gcc/g++的使用
  • 基于模糊神经网络的金融序列预测算法matlab仿真
  • STM32 HAL库常用功能封装
  • golang zap日志库 打印日志时显示的源文件始终是同一个问题解决方法 zap.Option函数可选项 zap.AddCallerSkip(1) 使用示例
  • BL196MQTT远程IO模块助力智能楼宇自动化升级
  • 【面试宝典】Java面向对象面试题总结(上)
  • 如何运用独特的产业运营体系打造一流的数字媒体产业园
  • 安全基础学习-SHA-256
  • Redis中Big Key该如何解决?
  • 基于springboot的实习管理系统
  • 土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测
  • Rust 之环境搭建
  • 基于微信小程序地图实现点位标注、覆盖物、地图聊天
  • xxl-job的分片广播+单播
  • 情感分类代码
  • WPF—常用控件、属性、事件、详细介绍
  • Oracle遭遇bug导致共享内存无法分配报ORA-04031错误
  • SAP BRIM用于应收账款AR收入中台
  • LVS原理简介
  • Qt五大核心特性之元对象系统