Er der et ækvivalent med Java-refleksion i Python?


Bedste svar

I Java og C # giver refleksion dig kode til at forhøre en klasse eller forekomst for at få egenskaberne til at køre tid. Udtrykket de bruger i Python er “introspektion”. Se Guide til Python-introspektion for detaljer.

Du kan gøre noget som dette:

#define a class

class Foo:

def bar(self):

return 123

#get the list of methodsmethodNames = filter(lambda x: not x.startswith("\_"), dir(foo.\_\_class\_\_))

#call the first method

getattr(foo, methodNames[0])()

Python er dog ikke nøjagtigt skrevet, så der er ikke en forestilling om selvbeskrivende typer. Det betyder, at nogle af de ting, vi typisk bruger refleksion til (enhedsmodeller, brugerdefineret serialisering som JsonConvert, nogle IoC-mønstre og generel aspektorienteret trickery) ikke oversættes rigtig godt. Fra hvad jeg har set, synes Python-introspektion mest brugt til automatisk genereret hjælp.

Du kan gøre noget ved hjælp af kodningskonventioner, men compileren vil ikke være i stand til at håndhæve ting, som du måske forventer. “Thinking Python” tager lidt at vænne sig til, og sproget gør afvejninger, der er lidt foruroligende, hvis du kommer fra en streng type baggrund. En del af det sjove er, at du får brugt mere tid på kodning af kode og mindre tid på kodningsrammer. Det tager bare lidt at vænne sig til.

Svar

Python.

Overvej ikke engang at vælge et andet sprog som dit første. Hvorfor? Nå,

  • Python er let. Stol på mig på denne. Mit første store sprog var C ++, og det førte mig til at overveje en karriereændring. Her er et kort klip af C ++ -kode til visning af “Hello world” på skærmen –

#include

int main() {

std::cout << "Hello world!" << std::endl;

return 0;

}

Her er den samme ting i Python

print("Hello world!")

  • Python er dynamisk skrevet. Hvad i alverden er det? Okay, så computere er dumme. De er ikke kloge nok til at vide, at 1 er et tal eller specifikt et heltal, og at "hej" er et ord eller "streng" i computersnak. Så på grund af det var nogle programmeringssprog nødvendige for at specificere den slags ting, de arbejdede med. Hvis du f.eks. Har brug for at tilføje to tal i Java, skal du her gøre -

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

Ser du det "int" nøgleord? Det står for "heltal", og som grundlæggende bare fortæller computeren, "Hej, jeg har brug for noget til at gemme dette nummer, men da du er for dum til at vide, at det er et nummer, har jeg angivet det, og så skal du huske, at variablen kaldet “først” kan kun gemme heltalsværdier, og jeg har givet det værdien 1. Og så videre med "andet" og "sum" ". Det er, hvad der sker med Java. I Python?

first = 1

second = 2

sum = first + second

print(sum)

Ser du, hvor rent det er? Bemærk det fredfyldte fravær af semikolon.

  • Python understøtter alle programmeringsstile. Okay, dette kan være lidt kontroversielt, men det er stadig værd at nævne. Generelt er der to metoder (ingen ordspil beregnet) til programmering - objektorienteret og proceduremæssig. Jeg vil ikke komme i detaljer, men kort historie, de er begge gode måder at nærme sig problemer på, men Objektorienteret er bedre egnet til store projekter og vil, hvis det gøres rigtigt (meget i sig selv), være renere . Proceduremæssig er bedre for små projekter at få ting, bare gjort. For eksempel -

class Hello{

public static void main(String args[]){

System.out.println("Hello world!");

}

}

vs

def main():

print("Hello world!")

main()

  • Nu understøtter både Python og Java OOP (objektorienteret programmering), men Java tvinger det på dig ved at give dig ingen andre udgang. Det for store virksomheder og store projekter kan være en god ting, men for en person, der ikke engang ved, hvad en klasse er, kan være et stort besvær. Python lader dig derimod gøre dine egne ting. Igen kan dette være en dårlig ting, men det afhænger alt af, hvilken praksis du vælger og følger. Ruby er et andet sprog, og det er meget svarende til Python, men jeg kan ikke lide det så meget, fordi det er langt mere skånsomt for kodere. Python opretholder slags den fine linje.Men ja, for en begynder kan Objektorienteret føle sig tvunget, hvis alt hvad du skal gøre er at skrive noget for at tage to numre og udskrive deres sum, men i det lange virkelig langt run, det kunne være en god ting.
  • Python bruges næsten overalt. Web-udvikling? Kontrollere. Indtrængningstest? Kontrollere. Lav fantastiske spil? Kontrollere. Limkode til projekter, der ikke er skrevet i Python? Kontrollere. Maching Learning? Dobbelttjek den dreng! Videnskabelig undersøgelse? Kontrollere. Akademikere? Kontrollere. Android-apps og andre skalerbare projekter ...? Java er din ting. Indbygget programmering er et sted, hvor Python mislykkes.

Og jeg tror, det handler om det. Begge sprog er gode i deres egen ting, og hvad de bruges til, men Python, hænder ned, er en af de bedste ting, en begynder kan starte med i dag.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *