Skip to main content

Python 面向对象

Python 获取对象信息

在 Python 中,当你拿到一个对象的引用时,可以通过以下方法来确定对象的类型以及查看它有哪些方法或属性。主要包括函数包括 type isinstance dir hasattr

1. 查看对象类型

使用内置函数 type()isinstance() 来检查对象的类型:

isinstance(obj, class):检查对象是否是指定类型的实例。例如:

obj = [1, 2, 3]
print(isinstance(obj, list))  # 输出: True
print(isinstance(obj, dict))  # 输出: False

type(obj):返回对象的类型。例如:

obj = [1, 2, 3]
print(type(obj))  # 输出: <class 'list'>

2. 查看对象的方法和属性

使用以下方法可以列出对象的属性和方法:

    • 返回列表中以双下划线 __ 开头和结尾的是 Python 的魔术方法(特殊方法)。
    • 其他的是常规方法或属性。

help(obj):提供对象的详细文档,包括类型、方法和属性的说明。

obj = [1, 2, 3]
help(obj)  # 输出列表类型的详细文档

dir(obj):返回对象的所有属性和方法的列表,包括内置的和自定义的。

obj = [1, 2, 3]
print(dir(obj))  # 输出: ['__add__', ..., 'append', 'clear', 'copy', ...]

3. 检查特定方法或属性是否存在

使用 hasattr(obj, name) 检查对象是否具有某个方法或属性:

obj = [1, 2, 3]
print(hasattr(obj, 'append'))  # 输出: True
print(hasattr(obj, 'keys'))    # 输出: False

4. 动态获取对象信息

如果需要更深入的检查,可以使用 inspect 模块(适合高级用途):

import inspect

obj = [1, 2, 3]
# 获取所有方法
methods = [attr for attr in dir(obj) if inspect.ismethod(getattr(obj, attr))]
print(methods)  # 输出: ['append', 'clear', 'copy', 'count', ...]

5. 注意事项

  • 动态类型:Python 是动态类型语言,对象的类型和方法可能在运行时改变,因此总是建议在运行时检查。
  • 自定义对象:如果对象是自定义类实例,dir()help() 会显示类中定义的属性和方法。

示例:综合应用

obj = "Hello"
print(type(obj))              # 输出: <class 'str'>
print(isinstance(obj, str))   # 输出: True
print(dir(obj)[:2])           # 输出前2个属性/方法: ['__add__', '__class__']
print(hasattr(obj, 'upper'))  # 输出: True
help(str.upper)               # 查看 upper 方法的文档