Finns det en motsvarighet till Java-reflektion i Python?


Bästa svaret

I Java och C # kan du reflektera en kod för att förhöra en klass eller instans för att få egenskaperna att köras tid. Termen de använder i Python är ”introspektion”. Se Guide till Pythons introspektion för mer information.

Du kan göra något liknande:

#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 är emellertid inte strikt skrivet så det finns egentligen inte en uppfattning om självbeskrivande typer. Det betyder att vissa av de saker vi vanligtvis använder reflektion för (enhetsmodeller, anpassad serialisering som JsonConvert, vissa IoC-mönster och generell aspekt orienterad trickery) inte översättas väldigt bra. Från vad jag har sett verkar Python-introspektion mest användas för automatisk genererad hjälp.

Du kan göra någonting med kodkonventioner, men kompilatorn kommer inte att kunna genomdriva saker som du kan förvänta dig. ”Thinking Python” tar lite att vänja sig vid, och språket gör avvägningar som är lite oroande om du kommer från strikt typbakgrund. En del av det roliga är att du får spendera mer tid på kodning av kod och mindre tid på att koda ramar. Det tar bara lite att vänja sig.

Svar

Python.

Tänk inte ens på det för att välja ett annat språk som ditt första. Varför? Tja,

  • Python är enkelt. Lita på mig här. Mitt första stora språk var C ++ och det ledde mig till att överväga en karriärförändring. Här är ett kort klipp av C ++ – kod för att visa “Hello world” på skärmen –

#include

int main() {

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

return 0;

}

Här är samma sak i Python

print("Hello world!")

  • Python skrivs dynamiskt. Vad i hela världen är det? Okej, så datorer är dumma. De är inte tillräckligt smarta för att veta att 1 är ett tal eller specifikt ett heltal och att "hej" är ett ord eller "sträng" i datasamtal. Så därför behövde vissa programmeringsspråk ange vilken typ av saker de arbetade med. Om du till exempel behövde lägga till två nummer i Java, här är vad du måste göra -

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" nyckelordet? Det står för "heltal" och som i grunden bara säger till datorn: "Hej, jag behöver något för att lagra detta nummer men eftersom du är för dum för att veta att det är ett nummer har jag angett det och så bör du komma ihåg att variabeln kallad “först” kan endast lagra heltal och jag har gett det värdet 1. Och så vidare med "andra" och "summa" ". Det är vad som händer med Java. I Python?

first = 1

second = 2

sum = first + second

print(sum)

Ser du hur rent det är? Observera den fridfulla frånvaron av semikolon.

  • Python stöder alla programmeringsstilar. Okej, det här kan vara lite kontroversiellt men det är fortfarande värt att nämna. I stort sett finns det två metoder (ingen ordspel avsedd) för programmering - objektorienterad och procedurell. Jag kommer inte att gå in på detaljer, men, kort historia, de är båda fantastiska sätt att närma sig problem men Object Oriented är bättre lämpad för storskaliga projekt och kommer, om det görs rätt (en enorm affär i sig), vara renare . Procedurellt är bättre för små projekt att få saker, bara gjort. Till exempel -

class Hello{

public static void main(String args[]){

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

}

}

vs

def main():

print("Hello world!")

main()

  • Nu stöder både Python och Java OOP (objektorienterad programmering) men Java tvingar det på dig genom att ge dig ingen annan utväg. Det för stora företag och storskaliga projekt kan vara bra men för någon som inte ens vet vad en klass kan vara ett stort besvär. Python, å andra sidan, låter dig göra dina egna saker. Återigen kan det här vara en dålig sak, men allt beror på vilken typ av metoder du väljer och följer. Ruby är ett annat språk och det väldigt liknar Python men jag tycker inte om det så mycket eftersom det är mycket lättare för kodare. Python håller typ av den fina linjen.Men ja, för en nybörjare kan Object Oriented känna sig tvingad om allt du behöver göra är att skriva något för att ta i två siffror och skriva ut deras summa men i det långa riktigt långt run, det kan vara bra.
  • Python används nästan överallt. Webbutveckling? Kontrollera. Penetrationstestning? Kontrollera. Gör fantastiska spel? Kontrollera. Limkod för projekt som inte är skrivna i Python? Kontrollera. Maching Learning? Kontrollera pojken! Vetenskaplig forskning? Kontrollera. Akademiker? Kontrollera. Android-appar och andra skalbara projekt ...? Java är din grej. Inbyggd programmering är en plats där Python misslyckas.

Och jag tror att det handlar om det. Båda språken är bra i sin egen sak och vad de används för, men Python, utan att räcka, är en av de bästa sakerna en nybörjare kan börja med idag.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *