跳到主要内容

阐述 Python自省(机制与函数) ?

参考答案:

Python自省(Introspection)是Python的一种强大特性,它允许开发者在运行时查看对象的类型、属性和方法等信息。自省是通过内建函数和特殊方法实现的,这些函数和方法提供了关于对象自身的信息。

Python自省主要包括以下几个方面:

  1. 类型检查:通过 type() 函数可以获取一个对象的类型。
x = [1, 2, 3]
print(type(x))  # 输出: <class 'list'>
  1. 属性检查:使用 dir() 函数可以查看一个对象的所有属性和方法。
class MyClass:
    def my_method(self):
        pass

obj = MyClass()
print(dir(obj))  # 输出: ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'my_method']
  1. 获取对象文档:使用 help() 函数或对象的 __doc__ 属性可以查看对象的文档字符串。
def my_function():
    """This is a docstring."""
    pass

print(help(my_function))  # 输出: Help on function my_function in module __main__:
# my_function()
#     This is a docstring.

print(my_function.__doc__)  # 输出: This is a docstring.
  1. 反射:Python中的反射允许你在运行时动态地调用对象的属性或方法。这可以通过 getattr(), setattr(), hasattr()delattr() 函数实现。
class MyClass:
    def my_method(self):
        print("Hello, world!")

obj = MyClass()

# 使用反射调用方法
if hasattr(obj, 'my_method'):
    method = getattr(obj, 'my_method')
    method()  # 输出: Hello, world!

通过这些自省机制,Python开发者可以在运行时动态地了解对象的信息,并据此编写更加灵活和可维护的代码。