从函数本身获取标准库函数的点分隔路径

Get dot separated path of a standard library function from the function itself

有没有办法获取标准库函数的全名(函数的点分隔路径,包括其名称)?例如:

import sys
import os
from random import choice

my_function = choice([sys.exit, os.path.join, os.getcwd])

print(my_function) # Somehow generate full name of the built-in function
# Would expect to get one of 'sys.exit', 'os.path.join' or 'os.getcwd'

您可以使用函数的 __module____qualname__ 属性获取您要查找的信息(在 Python 3 下)。例如:

>>> import sys
>>> func = sys.exit
>>> print('{}.{}'.format(func.__module__, func.__qualname__))
sys.exit

这也适用于 class 名成员:

>>> import email.message

>>> func = email.message.Message.get_payload
>>> print('{}.{}'.format(func.__module__, func.__qualname__))
email.message.Message.get_payload

在 Python 2.x 下需要多做一些工作,因为 __qualname__ 属性不可用:

>>> print('{}.{}.{}'.format(func.__module__, func.im_class.__name__, func.__name__))