Is er een equivalent van Java-reflectie in Python?

Beste antwoord

In Java en C # laat reflectie je code toe om een ​​klasse of instantie te ondervragen om de eigenschappen bij het uitvoeren te krijgen tijd. De term die ze in Python gebruiken is “introspectie”. Zie Gids voor Python-introspectie voor details.

Je kunt zoiets als dit doen:

#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 is echter niet strikt getypt, dus er is niet echt een idee van zelfbeschrijvende typen. Dat betekent dat sommige van de dingen waar we doorgaans reflectie voor gebruiken (entiteitsmodellen, aangepaste serialisatie zoals JsonConvert, sommige IoC-patronen en algemene aspectgeoriënteerde bedrog) niet erg goed vertalen. Van wat ik heb gezien, lijkt Python-introspectie meestal te worden gebruikt voor automatisch gegenereerde hulp.

Je kunt iets doen met behulp van codeerconventies, maar de compiler zal niet in staat zijn om dingen af ​​te dwingen die je misschien verwacht. “Thinking Python” is even wennen, en de taal maakt afwegingen die een beetje verontrustend zijn als je een strikte achtergrond hebt. Een deel van het plezier is dat je meer tijd kunt besteden aan het coderen van code en minder aan het coderen van frameworks. Het is even wennen.

Antwoord

Python.

Denk er niet eens over na om een ​​andere taal als eerste te kiezen. Waarom? Nou,

  • Python is eenvoudig. Vertrouw me op deze. Mijn eerste hoofdtaal was C ++ en het bracht me ertoe om een ​​carrièreverandering te overwegen. Hier is een kort stukje C ++ – code voor het weergeven van “Hallo wereld” op het scherm –

#include

int main() {

std::cout

return 0;

}

Hier is hetzelfde in Python

print("Hello world!")

  • Python wordt dynamisch getypt. Wat is dat in hemelsnaam? Oké, dus computers zijn dom. Ze zijn niet slim genoeg om te weten dat 1 een getal is, of specifiek een geheel getal, en dat hallo een woord of string is in computerpraat. Daarom moesten sommige programmeertalen specificeren met wat voor soort dingen ze werkten. Als u bijvoorbeeld twee getallen in Java moet toevoegen, moet u het volgende doen:

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

Ziet u dat “int” -zoekwoord? Dat staat voor integer en dat zegt eigenlijk gewoon tegen de computer: Hé, ik heb iets nodig om dit nummer op te slaan, maar aangezien je te dom bent om te weten dat het een getal is, heb ik het gespecificeerd en dus moet je onthouden dat de variabele genaamd “first” kan alleen gehele getallen opslaan en ik heb het de waarde 1 gegeven. En zo verder met “second” en “sum” “. Dat is wat er aan de hand is met Java. In Python?

first = 1

second = 2

sum = first + second

print(sum)

Zie je hoe schoon dat is? Let op de serene afwezigheid van puntkommas.

  • Python ondersteunt alle programmeerstijlen. Oké, dit is misschien een beetje controversieel, maar het is toch het vermelden waard. In grote lijnen zijn er twee methoden (geen woordspeling bedoeld) voor programmeren – objectgeoriënteerd en procedureel. Ik ga niet in details treden, maar, om een ​​lang verhaal kort te maken, het zijn allebei geweldige manieren om problemen te benaderen, maar Object Oriented is beter geschikt voor grootschalige projecten en zal, als het goed wordt gedaan (op zichzelf al een enorme deal), schoner zijn . Procedureel is beter voor kleine projecten om dingen gewoon gedaan te krijgen. Bijvoorbeeld –

class Hello{

public static void main(String args[]){

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

}

}

vs

def main():

print("Hello world!")

main()

  • Nu ondersteunen zowel Python als Java OOP (objectgeoriënteerd programmeren), maar Java dwingt het je af door je geen ander te geven uitgang. Dat kan voor grote bedrijven en grootschalige projecten een goede zaak zijn, maar voor iemand die niet eens weet wat een klas is, kan dit een groot gedoe zijn. Python, aan de andere kant, laat je je eigen ding doen. Nogmaals, dit kan een slechte zaak zijn, maar het hangt allemaal af van het soort oefeningen dat je oppakt en volgt. Ruby is een andere taal en het is erg vergelijkbaar met Python, maar ik vind het niet zo leuk omdat het veel soepeler is voor codeerders. Python handhaaft een beetje die fijne lijn.Maar ja, voor een beginner kan Object Oriented zich geforceerd voelen als u alleen maar iets hoeft te schrijven om twee getallen op te nemen en hun som af te drukken, maar dan in de lange, heel lange run, het zou een goede zaak kunnen zijn.
  • Python wordt bijna overal gebruikt. Webontwikkeling? Controleren. Penetratietesten? Controleren. Geweldige spellen maken? Controleren. Lijmcode voor projecten die niet native zijn geschreven in Python? Controleren. Machinaal leren? Controleer die jongen nogmaals! Wetenschappelijk onderzoek? Controleren. Academici? Controleren. Android-apps en andere schaalbare projecten …? Java is jouw ding. Native programmeren is een plek waar Python faalt.

En ik denk dat dat het zon beetje is. Beide talen zijn geweldig in hun eigen ding en waar ze voor worden gebruikt, maar Python is zonder twijfel een van de beste dingen waarmee een beginner vandaag kan beginnen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *