Esiste un equivalente della riflessione Java in Python?

Migliore risposta

In Java e C #, la riflessione consente al codice di interrogare una classe o istanza per ottenere le proprietà in esecuzione tempo. Il termine che usano in Python è “introspezione”. Vedi la Guida allintrospezione di Python per i dettagli.

Puoi fare qualcosa di simile:

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

Tuttavia, Python non è tipizzato rigorosamente, quindi non esiste davvero una nozione di tipi auto descrittivi. Ciò significa che alcune delle cose per cui tipicamente usiamo la riflessione (modelli di entità, serializzazione personalizzata come JsonConvert, alcuni modelli IoC e trucchi orientati agli aspetti generali) non si traducono molto bene. Da quello che ho visto, lintrospezione di Python sembra principalmente utilizzata per aiuto generato automaticamente.

Puoi fare qualcosa usando le convenzioni di codifica, ma il compilatore non sarà in grado di applicare cose come ti aspetti. “Thinking Python” richiede un po di tempo per abituarsi, e il linguaggio fa compromessi che sono un po inquietanti se si proviene da un background tipografico rigoroso. Parte del divertimento è che puoi dedicare più tempo alla codifica del codice e meno tempo alla codifica dei framework. Ci vuole solo un po per abituarsi.

Rispondi

Python.

Non pensarci nemmeno per selezionare unaltra lingua come prima. Perché? Bene,

  • Python è facile. Fidati di me su questo. Il mio primo linguaggio importante è stato il C ++ e mi ha portato a contemplare un cambiamento di carriera. Ecco un breve frammento di codice C ++ per visualizzare “Hello world” sullo schermo:

#include

int main() {

std::cout

return 0;

}

Ecco la stessa cosa in Python

print("Hello world!")

  • Python è tipizzato dinamicamente. Che diavolo è quello? Ok, quindi i computer sono stupidi. Non sono abbastanza intelligenti da sapere che 1 è un numero, o specificamente, un intero e che “ciao” è una parola o una “stringa” nel parlare al computer. Quindi, per questo motivo, alcuni linguaggi di programmazione dovevano specificare il tipo di cose con cui stavano lavorando. Ad esempio, se hai bisogno di aggiungere due numeri in Java, ecco cosa dovrai fare:

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

Vedi quella parola chiave “int”? Che sta per “intero” e in pratica dice al computer: “Ehi, ho bisogno di qualcosa per memorizzare questo numero ma siccome sei troppo stupido per sapere che è un numero lho specificato e quindi dovresti ricordare che la variabile chiamato “primo” può solo memorizzare valori interi e gli ho assegnato il valore 1. E così via con “secondo” e “somma” “. Questo è quello che succede con Java. In Python?

first = 1

second = 2

sum = first + second

print(sum)

Vedi quanto è pulito? Notare la serena assenza di punti e virgola.

  • Python supporta tutti gli stili di programmazione. Ok, questo potrebbe essere un po controverso ma vale comunque la pena menzionarlo. In generale, ci sono due metodi (senza giochi di parole) di programmazione: orientato agli oggetti e procedurale. Non entrerò nei dettagli ma, per farla breve, sono entrambi ottimi modi per affrontare i problemi, ma Object Oriented è più adatto per progetti su larga scala e, se fatto bene (un enorme affare in sé), sarà più pulito . Procedurale è meglio per piccoli progetti per ottenere le cose, solo, fatte. Ad esempio –

class Hello{

public static void main(String args[]){

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

}

}

vs

def main():

print("Hello world!")

main()

  • Ora sia Python che Java supportano OOP (programmazione orientata agli oggetti) ma Java te lo impone non dandoti altro via duscita. Questo, per le grandi aziende e i progetti su larga scala, potrebbe essere una buona cosa, ma per qualcuno che non sa nemmeno cosa sia una classe può essere una grande seccatura. Python, daltra parte, ti consente di fare le tue cose. Ancora una volta, questa potrebbe essere una brutta cosa, ma tutto dipenderà dal tipo di pratiche che raccogli e segui. Ruby è un altro linguaggio ed è molto simile a Python ma non mi piace così tanto perché è molto più indulgente con i programmatori. Python mantiene quella linea sottile.Ma sì, per un principiante, Object Oriented potrebbe sentirsi costretto se tutto ciò che devi fare è scrivere qualcosa per prendere due numeri e stampare la loro somma ma nel lungo, molto lungo run, potrebbe essere una buona cosa.
  • Python è usato quasi ovunque. Sviluppo web? Dai unocchiata. Test di penetrazione? Dai unocchiata. Realizzare giochi fantastici? Dai unocchiata. Colla codice per progetti non scritti in modo nativo in Python? Dai unocchiata. Maching Learning? Controlla bene quel ragazzo! Ricerca scientifica? Dai unocchiata. Accademici? Dai unocchiata. App Android e altri progetti scalabili …? Java è la tua passione. La programmazione nativa è un luogo in cui Python fallisce.

E penso che sia tutto qui. Entrambe le lingue sono fantastiche per le loro cose e per ciò per cui vengono utilizzate, ma Python, senza dubbio, è una delle cose migliori con cui un principiante potrebbe iniziare oggi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *