函数、变量和对象都可以用自省的方式进行分析。
首先,使用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