Общ преглед
Някога чудили ли сте се колко страхотно би било да имате силата да получите изходния код на някой друг модул на Python във вашата собствена програма? Това ще отвори идеи и врати за толкова много възможности като обработка на изходния код на модул, получаване на неговата документация, автоматично изготвяне на документация за парче код. Нека ви кажа, това е 100% възможно с Python's инспектирайте модул.
Модул за проверка на Python
Python инспектирайте модул ни позволява да инспектираме обекти на изпълняваща се програма, да получим изходния код на модул, да получим документацията, свързана с този модул, да прочетем подписа на метода на функция в Python и много други. По този начин можем да изграждаме проекти, които създават документация за кодове на живо за нашите собствени проекти. Това означава, че трябва само да направим необходимите коментари по нашия код на Python и можем да оставим останалата част от работата на самия Python, за да изготви документацията за нас.
Използване на примерен код
За да разберете как Python инспектирайте модул работи, ще използваме една от нашите собствени примерни дефиниции на код в Python, която просто демонстрира наследяване в Python и как се правят обектите. Нека да разгледаме примерния модул, който ще използваме в останалата част от урока тук:
def module_level_function (arg1, arg2 = 'по подразбиране', * args):"" "Аз съм функция на ниво модул.""
local_var = arg1 * 2
връщане local_var
клас Лице (обект):
"" "Определение за клас Person.""
def __init __ (самостоятелно, име):
себе си.име = име
def get_name (самостоятелно):
"Връща името на екземпляра."
върни себе си.име
person_obj = Лице ('sample_instance')
клас Студент (Лице):
"" "Това е клас" Студент ", дете от клас" Личност ".
""
# Този метод не е част от клас Person.
def do_something_else (самостоятелно):
"" "Всичко може да се направи тук.""
def get_name (самостоятелно):
„Заменя версията от клас Person“
return 'Student (' + self.име + ')'
Дефинирали сме примерен модул, за да можем да започнем да извличаме изходния код и други компоненти от него в следващите примери, които пишем. Да започваме.
Инспектиращ модул
Горният модул Python се записва във файл, наречен linuxhint.py в същата директория, където ще правим новите си Python скриптове. Можем да проверим модул в Python, като първо направим импортиране за него. Това изявление за импортиране ще присъства и във всички скриптове, които пишем в следващите раздели. Ето примерна програма, с която проверяваме нашия модул:
внос инспектираимпортиране на linuxhint
за име, данни в inspect.getmembers (linuxhint):
ако име.започва с('__'):
продължи
print (': !r '.формат (име, данни))
Ето какво получаваме обратно с тази команда:
Модул за проверка на Python
Изходът ни предоставя подробности за това колко класове, функции и обекти съществуват в този модул, когато се изпълнява скриптът.
Проверка на класове в модул
Горният пример, който показахме, представи всички подробности за модул наведнъж. ако искаме да получим само информацията, свързана с класовете в модула, можем да получим същото като:
внос инспектираимпортиране на linuxhint
за ключ, данни в проверка.getmembers (linuxhint, проверете.isclass):
print (': !r '.формат (ключ, данни))
Нека видим изхода за тази команда:
Python проверява клас модул
Резултатът е абсолютно същият, само че този път на конзолата бяха отпечатани само дефинициите на класа.
Проверка на методи в клас
Методите са този, който дефинира поведението на клас в ООП и предоставя информация за това как ще бъде модифицирано поведението на Обекти, когато методите са извикани към тях. Поради тази причина е важно да се документират всички методи, които съществуват в клас или модул. Можем да получим информация, свързана с метод като този:
внос инспектираот pprint импортиране
импортиране на linuxhint
pprint (проверете.getmembers (linuxhint.Лице, инспектирай.е функция))
Ето какво получаваме обратно с тази команда:
Проверка на метод на клас
Резултатът просто показва дефиницията на метода за всеки присъстващ метод.
Проверка на обекти от клас
Когато се самоанализирате за това колко място е заето, когато стартираме скрипт на Python, важно е да знаете колко обекта за класа са създадени за клас в програма. За да знаем това, можем да получим информация и за Обекти на клас в модул:
внос инспектираот pprint импортиране
импортиране на linuxhint
човек = linuxhint.Лице (име = 'inspect_getmembers')
pprint (проверете.getmembers (лице, инспектирайте.ismethod))
Нека видим изхода за тази команда:
Инспектиране на обекти от класа
Това също отпечатва адреса на паметта, където този обект живее по време на тази програма.
Проверка на Docstring на клас
Докстрингът на модул е частта, която всъщност информира потребител или разработчик, за какво става дума в този модул и какви функции предлага той. С модула за проверка можем да получим документацията на пълен модул, за да го документираме по-добре. Нека видим как можем да извлечем docstring за клас:
внос инспектираимпортиране на linuxhint
print ('Лице.__doc__: ')
печат (linuxhint.Личност.__doc__)
печат ()
print ('getdoc (Person):')
печат (инспектиране.getdoc (linuxhint.Лице))
Ето какво получаваме обратно с тази команда:
Получаване на Docstring за клас
Проверка на източника на клас
И накрая, можем да видим как можем да извлечем пълен изходен код на клас и в програма на Python. Това е важна характеристика, както и това ни помага да изградим инструменти за документация за модул Python. Нека да видим пример в действие:
внос инспектираимпортиране на linuxhint
печат (инспектиране.getource (linuxhint.Студент))
Ето какво получаваме обратно с тази команда:
Получаване на изходния код на класа
Проверка на източника на метод
По същия начин, по който извличаме изходния код на клас, сега ще извлечем изходния код на метод в нашата програма Python:
внос инспектираимпортиране на linuxhint
печат (инспектиране.getource (linuxhint.Студент.get_name))
Ето какво получаваме обратно с тази команда:
Получаване на източник на метод в клас
Подпис на метода за проверка
Подписът на метод предоставя задълбочена представа за това какво прави методът и какъв вход е необходим. Предоставя ни правомощието да документираме по-добре метод, тъй като документацията на даден метод е непълна, без да знаем какъв вход е необходим. Ето как можем да извлечем информацията, свързана с подпис на метод:
внос инспектираимпортиране на linuxhint
печат (инспектиране.подпис (linuxhint.модул_ниво_функция))
Ето какво получаваме обратно с тази команда:
Получаване на подпис на метод
Заключение
В този урок разгледахме как можем да използваме модула за проверка на Python, за да разгледаме изходния код и много други вътрешни характеристики на програма на Python. Прочетете повече публикации на базата на Python тук.