Există un echivalent al reflexiei Java în Python?


Cel mai bun răspuns

În Java și C #, reflecția vă permite codul să interogați o clasă sau o instanță pentru a obține proprietățile la rulare timp. Termenul pe care îl folosesc în Python este „introspecție”. Consultați Ghid pentru introspecția Python pentru detalii.

Puteți face așa ceva:

#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])()

Cu toate acestea, Python nu este strict tastat, deci nu există cu adevărat o noțiune de tipuri de auto-descriere. Asta înseamnă că unele dintre lucrurile pentru care folosim în mod obișnuit reflectarea (modele de entități, serializare personalizată, cum ar fi JsonConvert, unele modele IoC și trucuri generale orientate spre aspect) nu se traduc teribil de bine. Din ceea ce am văzut, introspecția Python pare a fi folosită în special pentru ajutor generat automat.

Puteți face ceva folosind convenții de codare, dar compilatorul nu va putea să pună în aplicare lucruri așa cum vă așteptați. „Thinking Python” se obișnuiește puțin, iar limba face compromisuri care sunt puțin neliniștitoare dacă provii dintr-un tip strict. O parte din distracție este că puteți petrece mai mult timp codând codul și mai puțin timp cadrele de codare. Este nevoie doar să te obișnuiești.

Răspunde

Python.

Nici măcar nu te gândești la asta pentru a selecta o altă limbă ca prima ta. De ce? Ei bine,

  • Python este ușor. Ai încredere în mine. Primul meu limbaj major a fost C ++ și m-a condus la contemplarea unei schimbări de carieră. Iată un scurt fragment de cod C ++ pentru afișarea „Hello world” pe ecran –

#include

int main() {

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

return 0;

}

Iată același lucru în Python

print("Hello world!")

  • Python este tastat dinamic. Ce este în lume asta? Bine, deci calculatoarele sunt stupide. Nu sunt suficient de inteligenți pentru a ști că 1 este un număr sau, în mod specific, un număr întreg și că „salut” este un cuvânt sau „șir” în discuțiile pe computer. Așadar, din această cauză, unele limbaje de programare trebuiau să specifice tipul de lucruri cu care lucrau. De exemplu, dacă trebuia să adăugați două numere în Java, iată ce va trebui să faceți -

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

Vedeți acel cuvânt cheie „int”? Asta înseamnă „întreg” și care, practic, spune computerului: „Hei, am nevoie de ceva pentru a stoca acest număr, dar din moment ce ești prea prost ca să știi că este un număr l-am specificat și deci ar trebui să-ți amintești că variabila numit „primul” poate doar stoca valori întregi și i-am dat valoarea 1. Și așa mai departe cu „al doilea” și „suma” ”. Asta se întâmplă cu Java. În Python?

first = 1

second = 2

sum = first + second

print(sum)

Vedeți cât de curat este? Rețineți absența senină a punctelor și virgulelor.

  • Python acceptă toate stilurile de programare. Bine, ar putea fi puțin controversat, dar merită menționat. În linii mari, există două metode de programare (nu sunt destinate jocurilor de cuvinte) - orientate pe obiecte și procedurale. Nu am de gând să intru în detalii, dar, pe scurt, amândouă sunt modalități excelente de abordare a problemelor, dar Orientat pe obiecte este mai potrivit pentru proiecte la scară largă și, dacă este făcut corect (o afacere uriașă în sine), va fi mai curat . Procedura este mai bună pentru proiectele mici pentru a finaliza lucrurile. De exemplu -

class Hello{

public static void main(String args[]){

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

}

}

vs

def main():

print("Hello world!")

main()

  • Acum, atât Python cât și Java acceptă OOP (programare orientată pe obiecte), dar Java îl forțează dându-vă niciun alt cale de ieșire. Acest lucru, pentru companiile mari și proiectele la scară largă, ar putea fi un lucru bun, dar pentru cineva care nici măcar nu știe ce este o clasă poate fi o problemă mare. Pe de altă parte, Python vă permite să vă faceți propriile lucruri. Din nou, acest lucru ar putea fi un lucru rău, dar totul va depinde de tipul de practici pe care le preluați și le urmați. Ruby este un alt limbaj și este foarte similar cu Python, dar nu-mi place atât de mult, deoarece este mult mai îngăduitor pentru programatori. Python menține linia subțire.Dar da, pentru un începător, Object Oriented s-ar putea simți forțat dacă tot ce trebuie să faceți este să scrieți ceva pentru a lua în două numere și să le imprimați suma, dar pe termen lung, foarte lung run, ar putea fi un lucru bun.
  • Python este folosit aproape peste tot. Dezvoltare web? Verifica. Testarea penetrării? Verifica. Faceți jocuri minunate? Verifica. Cod de lipici pentru proiecte care nu sunt scrise nativ în Python? Verifica. Maching Learning? Verifică din nou băiatul acela! Cercetare științifică? Verifica. Academici? Verifica. Aplicații Android și alte proiecte scalabile ...? Java este lucrul tău. Programarea nativă este un loc în care Python eșuează.

Și cred că despre asta e vorba. Ambele limbi sunt grozave în propriile lor lucruri și pentru ce sunt folosite, dar Python, cu mâinile jos, este unul dintre cele mai bune lucruri pe care un începător ar putea să le înceapă astăzi.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *