Python自省(机制与函数)

server/2024/9/22 13:46:28/

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.ppmy.cn/server/100862.html

相关文章

北京城市图书馆-非遗文献馆:OLED透明拼接屏的璀璨应用

在数字化与传统文化深度融合的今天&#xff0c;北京城市图书馆的非遗文献馆以一场前所未有的视觉盛宴&#xff0c;向世人展示了OLED透明拼接屏的非凡魅力与无限可能。这座集阅读、展示、体验于一体的非遗文献馆&#xff0c;通过2*7布局的OLED透明拼接屏&#xff0c;不仅为传统非…

【日常记录-Java】EasyExcel输出设定字体

Author&#xff1a;赵志乾 Date&#xff1a;2024-08-15 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 问题描述 使用EasyExcel默认的设定输出时&#xff0c;中文字体显得比较怪异。 2. 解决方案 本质是单元格样式的设置问题&#xff0c…

MybatisPlus使用指南

MybatisPlus 1. 快速入门1.1 入门案例1.2 常见注解1.3 常见配置 2. 核心功能2.1 条件构造器2.2 自定义SQL2.3 Service接口 3. 扩展功能3.1 代码生成3.2 静态工具3.3 逻辑删除 4. 插件功能4.1 分页插件4.2 通用分页实体 1. 快速入门 1.1 入门案例 步骤一&#xff1a;引入Mybat…

机器学习-卷积神经网络(CNN)

机器学习-卷积神经网络&#xff08;CNN&#xff09; 1. 卷积神经网络的基本概念1.1 卷积层&#xff08;Convolutional Layer&#xff09;1.1.1 卷积操作1.1.2 特征图&#xff08;Feature Map&#xff09; 1.2 激活函数&#xff08;Activation Function&#xff09;1.2.1 ReLU&a…

滑动窗口记录左右的最大值

前言&#xff1a;看到这个题目的时候分析了一下&#xff0c;就是最大值问题&#xff0c;但是要注意分类讨论 以后遇到离散化的问题&#xff0c;还可以开一个map来记录存在的点&#xff0c;免得二分查找的点不存在 #include<bits/stdc.h> using namespace std;const int …

AWS认证SAA-C03每日一题

本题库由云计算狂魔微信公众号分享。 【SAA-C03助理级解决方案架构师认证】 A company hosts an application on AWS Lambda functions that are invoked by an Amazon API Gateway API. The Lambda functions save customer data to an Amazon Aurora MySQL database Wheneve…

Unity 6 预览版正式发布

Unity 6 预览版发布啦&#xff0c;正式版本将于今年晚些时候正式发布&#xff01; 下载链接&#xff1a; https://unity.com/releases/editor/whats-new/6000.0.0 Unity 6 预览版是 Unity 6 开发周期的最后一个版本&#xff0c;在去年 11 月 Unite 大会上&#xff0c;我们宣…

【Next】全局样式和局部样式

不同于 nuxt &#xff0c;next 的样式绝大部分都需要手动导入。 全局样式 使用 sass 先安装 npm i sass -D 。 我们可以定义一个 styles 文件&#xff0c;存放全局样式。 variables.scss $fs30: 30px;mixin border() {border: 1px solid red; }main.scss use ./variables …