Python

Python-inspektionsmodul

Python-inspektionsmodul

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 inspicere
importer 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 inspicere
importer 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 inspicere
fra 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 inspicere
fra 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 inspicere
importer 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 inspicere
importer 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 inspicere
importer 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 inspicere
importer 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.

Open Source-porte med kommercielle spilmotorer
Gratis, open source og cross-platform spilmotorgendringer kan bruges til at spille gamle såvel som nogle af de temmelig nylige spiltitler. Denne artik...
Bedste kommandoliniespil til Linux
Kommandolinjen er ikke kun din største allierede, når du bruger Linux, den kan også være kilde til underholdning, fordi du kan bruge den til at spille...
Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...