Python自省的分析方法

77 阅读1分钟

函数、变量和对象都可以用自省的方式进行分析。

首先,使用help() 全局函数,如果以docstrings的形式提供,我们可以得到文档。

然后,你可以使用print()来获取一个函数的信息。

def increment(n):
    return n + 1

print(increment)

# <function increment at 0x7f420e2973a0>

或一个对象的信息。

class Dog():
    def bark(self):
        print('WOF!')

roger = Dog()

print(roger)

# <__main__.Dog object at 0x7f42099d3340>

type() 函数给了我们一个对象的类型。

print(type(increment))
# <class 'function'>

print(type(roger))
# <class '__main__.Dog'>

print(type(1))
# <class 'int'>

print(type('test'))
# <class 'str'>

dir() 全局函数让我们找出一个对象的所有方法和属性。

print(dir(roger))

# ['__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__', 'bark']

id() 全局函数向我们显示任何对象在内存中的位置。

print(id(roger)) # 140227518093024
print(id(1))     # 140227521172384

它对于检查两个变量是否指向同一个对象很有用。

inspect 标准库模块为我们提供了更多的工具来获取对象的信息,你可以在这里查看: https://docs.python.org/3/library/inspect.html