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

Python 获取对象信息的所有方法

在 Python 里,我们经常需要检查一个对象的类型、属性、方法,甚至它的源码。这对调试、学习和动态编程特别有用。今天我们就来聊聊获取对象信息的常见方法,按由浅入深的顺序来学习。

参考文章:Python 获取对象信息 | 简单一点学习 easyeasy.me

1. 用 type() 查看对象类型

最直接的方法就是 type(),它会返回对象的类型。

x = 123
print(type(x))   # <class 'int'>y = "Hello"
print(type(y))   # <class 'str'>

适合快速判断变量属于什么类型。


2. 用 isinstance() 判断对象类型

isinstance() 用来判断对象是否属于某个类(或其子类)。

x = 3.14
print(isinstance(x, float))   # True
print(isinstance(x, int))     # False# 支持元组,一次判断多个类型
print(isinstance(x, (int, float)))  # True

适合类型分支处理,比 type() 更灵活,因为它会考虑继承关系。


3. 用 dir() 查看对象所有属性和方法

dir() 会列出对象的所有属性和方法(包括继承的)。

print(dir("abc"))

输出(部分):

['__add__', '__class__', '__contains__', '__eq__', ...]

小技巧dir() 会返回魔法方法(__xxx__)和普通方法混在一起,可配合 filter() 或列表推导筛掉。


4. 用 hasattr()getattr()setattr() 动态操作属性

这三个函数能动态检查、获取、设置属性。

class Person:def __init__(self, name):self.name = namep = Person("Tom")print(hasattr(p, "name"))       # True
print(getattr(p, "name"))       # Tomsetattr(p, "age", 18)
print(p.age)                    # 18

适合写通用代码,比如 JSON ↔ 对象 转换。


5. 用 vars()__dict__ 查看对象的属性字典

vars() 会返回对象的 __dict__ 属性(存放实例变量的字典)。

class Car:def __init__(self, brand, price):self.brand = brandself.price = pricec = Car("Tesla", 300000)
print(vars(c))      # {'brand': 'Tesla', 'price': 300000}
print(c.__dict__)   # 同样的结果

注意:内置类型(如 list)没有 __dict__,因为它们用 __slots__ 或 C 实现。


6. 用 callable() 判断对象是否可调用

可调用对象包括函数、类、实现了 __call__ 方法的实例。

print(callable(len))       # True
print(callable("hello"))   # False

7. 用 id() 获取对象的内存地址

id() 返回对象在内存中的唯一标识(CPython 中是地址)。

x = 100
print(id(x))  # 例如 140714563326192

8. 用 help() 获取对象的文档说明

help() 会进入交互式帮助,显示对象的功能和用法。

help(str)
help(str.upper)

在 IDE 或交互式终端特别有用,相当于 Python 自带文档查询。


9. 用 __class____bases__ 查看类信息

class Animal: pass
class Dog(Animal): passd = Dog()
print(d.__class__)    # <class '__main__.Dog'>
print(Dog.__bases__)  # (<class '__main__.Animal'>,)

10. 用 inspect 模块获取更详细信息(进阶)

inspect 是 Python 官方的“对象解剖工具”,功能很全。

import inspectdef foo(a, b=1):"""这是 foo 函数的说明"""return a + bprint(inspect.getsource(foo))   # 获取源码
print(inspect.signature(foo))   # 获取函数签名
print(inspect.getdoc(foo))      # 获取文档字符串
print(inspect.getmodule(foo))   # 获取所在模块

常用函数:

  • inspect.getmembers(obj) 获取对象所有成员
  • inspect.isfunction(obj) 判断是否是函数
  • inspect.ismethod(obj) 判断是否是方法

11. 用 __slots__ 限制并查看属性(特殊场景)

class Point:__slots__ = ("x", "y")def __init__(self, x, y):self.x = xself.y = yp = Point(1, 2)
# print(vars(p))  # 会报错,因为没有 __dict__

有些类用 __slots__ 节省内存,这时 vars() 取不到属性,需要自己访问。


12. 用 gc 模块查看所有对象(调试内存)

import gc
objs = gc.get_objects()
print(len(objs))  # 当前内存里对象的数量

13. 总结

在 Python 中,获取对象信息的方法从基础到进阶依次是:

  1. type() / isinstance()
  2. dir() / hasattr() / getattr() / setattr()
  3. vars() / __dict__
  4. callable() / id() / help()
  5. __class__ / __bases__
  6. inspect 模块(源码、签名、文档)
  7. gc 模块(调试对象)

学会这些方法,你就能像外科医生一样“剖析”任何 Python 对象。

http://www.dtcms.com/a/324741.html

相关文章:

  • 基于Spring Boot和SSE的实时消息推送系统
  • 三数之和 Java
  • 人工智能系列(7)人工神经网络中的无监督学习
  • C语言-数组和指针练习题合集(一)
  • C语言深度剖析
  • 网页五子棋测试
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-关于我们
  • 2025最新免费的大模型和免费的大模型API有哪些?(202508更新)
  • 秋招春招实习百度笔试百度管培生笔试题库百度非技术岗笔试|笔试解析和攻略|题库分享
  • 冒泡排序实现以及优化
  • WebSocket集群方案解析与实现
  • My APK 安卓版:高效管理手机应用的工具软件
  • windows的cmd命令【持续更新】
  • Linux应用软件编程---文件操作1(fopen、fclose、fgetc/fputc、fgets/fputs)
  • 什么是浏览器标识?
  • 【Docker进阶实战】从多容器编排到集群部署
  • TSF应用开发与运维部署
  • 个人笔记Mybatis2
  • 医学统计(现况调查的统计分析策略1)
  • 电脑使用“碎片整理”程序的作用
  • 基于ECharts的智慧社区数据可视化
  • 【npm、yarn、pnpm】特点对比,按需选择
  • Java设计模式之开闭原则介绍与说明
  • 【RocketMQ 生产者和消费者】- ConsumeMessageOrderlyService 顺序消费消息
  • Vue.js设计于实现 - 概览(二)
  • 跑酷小游戏2.0
  • C语言(长期更新)第10讲:操作符详解(二)
  • 麻溜启动Oracle实例demo
  • 【渲染流水线】[几何阶段]-[归一化NDC]以UnityURP为例
  • 基于Spring Boot和WebSocket的实时聊天系统