Получить точку, отделенную точкой стандартной функции библиотеки, от самой функции - PullRequest
0 голосов
/ 23 апреля 2019

Есть ли способ получить полное имя (разделенный точками путь к функции, включая ее имя) стандартной библиотечной функции? Например:

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'

1 Ответ

1 голос
/ 23 апреля 2019

Вы можете получить информацию, которую вы ищете, используя атрибуты __module__ и __qualname__ функции (в Python 3). Например:

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

Это также работает для учеников:

>>> 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__))
...