Existe um equivalente de reflexão Java em Python?


Melhor resposta

Em Java e C #, a reflexão permite que você codifique para interrogar uma classe ou instância para obter as propriedades em execução Tempo. O termo que eles usam em Python é “introspecção”. Consulte o Guia de introspecção Python para obter detalhes.

Você pode fazer algo assim:

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

No entanto, Python não é rigidamente tipado, então não há realmente uma noção de tipos auto-descritivos. Isso significa que algumas das coisas para as quais normalmente usamos reflexão (modelos de entidade, serialização personalizada como JsonConvert, alguns padrões IoC e truques orientados a aspectos gerais) não se traduzem muito bem. Pelo que tenho visto, a introspecção Python parece mais usada para ajuda gerada automaticamente.

Você pode fazer algumas coisas usando convenções de codificação, mas o compilador não será capaz de impor coisas como você espera. “Pensar Python” leva um pouco de tempo para se acostumar, e a linguagem faz concessões que são um pouco perturbadoras se você vier de um background de tipo restrito. Parte da diversão é que você passa mais tempo codificando códigos e menos tempo codificando estruturas. Demora um pouco para se acostumar.

Resposta

Python.

Nem pense nisso para selecionar outra linguagem como sua primeira. Por quê? Bem,

  • Python é fácil. Confie em mim. Minha primeira linguagem importante foi C ++ e isso me levou a contemplar uma mudança de carreira. Aqui está uma pequena amostra do código C ++ para exibir “Hello world” na tela –

#include

int main() {

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

return 0;

}

Aqui está a mesma coisa em Python

print("Hello world!")

  • Python é tipado dinamicamente. O que é isso? Ok, então os computadores são burros. Eles não são inteligentes o suficiente para saber que 1 é um número, ou especificamente, um inteiro e que "olá" é uma palavra ou "string" na conversa de computador. Portanto, por causa disso, algumas linguagens de programação precisaram especificar o tipo de coisa com que estavam trabalhando. Por exemplo, se você precisar adicionar dois números em Java, eis o que você terá que fazer -

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

Você vê a palavra-chave “int”? Isso significa "inteiro" e basicamente diz ao computador: "Ei, preciso de algo para armazenar este número, mas como você é muito estúpido para saber que é um número, eu o especifiquei e você deve se lembrar que a variável chamado de “primeiro” pode apenas armazenar valores inteiros e dei a ele o valor de 1. E assim por diante com “segundo” e “soma” ”. Isso é o que está acontecendo com Java. Em Python?

first = 1

second = 2

sum = first + second

print(sum)

Você vê como isso é limpo? Observe a serena ausência de ponto e vírgula.

  • Python suporta todos os estilos de programação. Ok, isso pode ser um pouco controverso, mas ainda assim vale a pena mencionar. Em termos gerais, existem dois métodos (sem trocadilhos) de programação - orientada a objetos e procedural. Não vou entrar em detalhes, mas, resumindo a história, ambas são ótimas maneiras de abordar problemas, mas a Orientação a Objetos é mais adequada para projetos de grande escala e, se feito da maneira certa (um grande negócio por si só), será mais limpa . Processual é melhor para pequenos projetos fazerem as coisas simplesmente. Por exemplo -

class Hello{

public static void main(String args[]){

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

}

}

vs

def main():

print("Hello world!")

main()

  • Agora, tanto Python quanto Java suportam OOP (programação orientada a objetos), mas Java impõe a você nenhum outro saída. Isso, para grandes empresas e projetos de grande escala, pode ser uma coisa boa, mas para alguém que nem sabe o que é uma aula pode ser um grande aborrecimento. Python, por outro lado, permite que você faça suas próprias coisas. Novamente, isso pode ser uma coisa ruim, mas tudo dependerá do tipo de práticas que você adotar e seguir. Ruby é outra linguagem e é muito semelhante ao Python, mas eu não gosto tanto porque é muito mais tolerante com os programadores. Python meio que mantém essa linha tênue.Mas sim, para um iniciante, Orientado a Objetos pode se sentir forçado se tudo que você precisa fazer é escrever algo para pegar dois números e imprimir sua soma, mas no longo, realmente longo executar, pode ser uma coisa boa.
  • Python é usado em quase todos os lugares. Desenvolvimento web? Verifica. Teste de penetração? Verifica. Fazendo jogos incríveis? Verifica. Código de cola para projetos não escritos nativamente em Python? Verifica. Aprendizado de Maching? Verifique aquele garoto! Pesquisa científica? Verifica. Acadêmicos? Verifica. Aplicativos Android e outros projetos escaláveis ...? Java é a sua praia. A programação nativa é um lugar onde o Python falha.

E eu acho que é isso. Ambas as linguagens são ótimas em suas próprias coisas e para o que são usadas, mas Python, sem dúvida, é uma das melhores coisas que um iniciante poderia começar hoje.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *