Oversigt
Nogensinde spekuleret på, hvor sejt det ville være at have magten til faktisk at få kildekoden til et andet Python-modul i dit eget program? Dette vil åbne ideer og døre til så mange muligheder som at behandle kildekoden til et modul, få sin dokstring og producere automatisk dokumentation til et stykke kode. Lad mig fortælle dig, dette er 100% muligt med Python's inspicere modul.
Python-inspektionsmodul
Python inspicere modul giver os mulighed for at inspicere objekter i et kørende program, få kildekoden til et modul, få docstring tilknyttet det modul, læse metodesignaturen for en funktion i Python og meget mere. På denne måde kan vi bygge projekter, der producerer live kodedokumentation til vores egne projekter. Dette betyder, at vi kun skal lave de nødvendige kommentarer til vores Python-kode, og vi kan overlade resten af jobbet til Python selv for at producere dokumentationen til os.
Brug af prøvekode
At forstå, hvordan Python er inspicere modul fungerer, vi bruger en af vores egne prøvekodedefinitioner i Python, som bare viser arv i Python, og hvordan objekter laves. Lad os se på det eksempelmodul, vi vil bruge i resten af vejledningen her:
def module_level_function (arg1, arg2 = 'default', * args):"" "Jeg er en funktion på modulniveau."" "
local_var = arg1 * 2
returner local_var
klasse Person (objekt):
"" "Definition for personklasse."" "
def __init __ (selv, navn):
selv.navn = navn
def get_name (selv):
"Returnerer navnet på forekomsten."
vende tilbage selv.navn
person_obj = Person ('sample_instance')
klasse studerende (person):
"" "Dette er elevklassen, barn af personklassen.
"" "
# Denne metode er ikke en del af personklassen.
def do_something_else (selv):
Alt kan gøres her."" "
def get_name (selv):
"Tilsidesætter version fra personklasse"
returner 'Student (' + selv.navn + ')'
Vi har defineret et eksempelmodul, så vi kan begynde at udtrække kildekoden og andre komponenter fra det i senere eksempler, vi skriver. Lad os komme igang.
Inspiceringsmodul
Ovenstående Python-modul gemmes i en fil, der hedder linuxhint.py i den samme mappe, hvor vi laver vores nye Python-scripts. Vi kan inspicere et modul i Python ved først at importere det. Denne importerklæring vil også være til stede i alle scripts, som vi skriver i senere afsnit. Her er et eksempelprogram, som vi inspicerer vores modul med:
import inspicereimporter linuxhint
for navn, data under inspektion.getmembers (linuxhint):
hvis navn.starter med ('__'):
Blive ved
Print(' : !r '.format (navn, data))
Her er hvad vi kommer tilbage med denne kommando:
Python-inspektionsmodul
Outputtet giver os detaljerne om, hvor mange klasser, funktioner og objekter der findes i dette modul, når scriptet køres.
Inspektion af klasser i et modul
Ovenstående eksempel, vi viste, præsenterede alle detaljer i et modul på én gang. hvis vi kun ønsker at få de oplysninger, der er relateret til klasserne i modulet, kan vi få det samme som:
import inspicereimporter linuxhint
for nøgle, inspektionsdata.getmembers (linuxhint, inspicér.isklasse):
Print(' : !r '.format (nøgle, data))
Lad os se output for denne kommando:
Python inspicere modul klasse
Outputtet er nøjagtigt det samme, kun at denne gang kun klassedefinitionerne blev udskrevet til konsollen.
Inspektion af metoder i en klasse
Metoderne er den, der definerer en klasses adfærd i OOP'er og giver information om, hvordan en Objektes adfærd vil blive ændret, efterhånden som metoderne kaldes dem. Det er derfor, det er vigtigt at dokumentere alle metoder, der findes i en klasse eller et modul. Vi kan få oplysninger relateret til en metode som denne:
import inspicerefra pprint import pprint
importer linuxhint
pprint (inspicér.getmembers (linuxhint.Person, inspicér.er funktion))
Her er hvad vi kommer tilbage med denne kommando:
Inspektion af en klassemetode
Outputtet viser bare metodedefinitionen for hver tilstedeværende metode.
Inspektion af genstande fra en klasse
Når du introspekterer, hvor meget plads der er optaget, når vi kører et Python-script, er det vigtigt at vide, hvor mange objekter til klassen der er instantieret til klassen i et program. For at vide dette kan vi også få oplysninger om objekter fra en klasse i et modul:
import inspicerefra pprint import pprint
importer linuxhint
person = linuxhint.Person (name = 'inspect_getmembers')
pprint (inspicér.getmembers (person, inspicér.ismetode))
Lad os se output for denne kommando:
Inspektion af objekter i klassen
Dette udskriver også hukommelsesadressen, hvor dette objekt bor i løbet af dette program.
Inspektion af Docstring i en klasse
Dokstring af et modul er den del, der faktisk informerer en bruger eller en udvikler om, at hvad dette modul handler om, og hvilke funktioner det giver. Med inspiceringsmodulet kan vi få dokstring af et komplet modul til at dokumentere det bedre. Lad os se, hvordan vi kan udtrække docstring til en klasse:
import inspicereimporter linuxhint
udskrive ('Person.__doc__: ')
udskrive (linuxhint.Person.__doc__)
Print()
print ('getdoc (person):')
udskrive (inspicere.getdoc (linuxhint.Person))
Her er hvad vi kommer tilbage med denne kommando:
Få Docstring til klassen
Inspektion af kilde til en klasse
Endelig kan vi se, hvordan vi også kan udtrække en komplet kildekode for en klasse i et Python-program. Dette er en vigtig funktion såvel som denne hjælper os med at opbygge dokumentationsværktøjer om et Python-modul. Lad os se et eksempel i aktion:
import inspicereimporter linuxhint
udskrive (inspicere.getsource (linuxhint.Studerende))
Her er hvad vi kommer tilbage med denne kommando:
Få kildekode til klasse
Inspektion af en metodes kilde
På samme måde som vi ekstraherede kildekoden til en klasse, udtrækker vi nu kildekoden til en metode i vores Python-program:
import inspicereimporter linuxhint
udskrive (inspicere.getsource (linuxhint.Studerende.get_name))
Her er hvad vi kommer tilbage med denne kommando:
Få kilde til metode i en klasse
Inspektionsmetode Underskrift
Signaturen af en metode giver en dyb indsigt i, hvad en metode gør, og hvilket input der kræves. Det giver os magten til at dokumentere en metode bedre, fordi dokumentationen af en metode er ufuldstændig uden at vide, hvilket input der kræves. Her er hvordan vi kan udtrække oplysningerne relateret til en metodesignatur:
import inspicereimporter linuxhint
udskrive (inspicere.signatur (linuxhint.module_level_function))
Her er hvad vi kommer tilbage med denne kommando:
At få underskrift af en metode
Konklusion
I denne lektion så vi på, hvordan vi kan bruge Python-inspektionsmodulet til at se på kildekoden og mange andre interne funktioner i et Python-program. Læs flere Python-baserede indlæg her.