• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

Tutorial de Python para programadores de Java?

17 mensagens neste tópico

Bem,

Queria avançar mais nos meus conhecimentos de Python, até ao momento não sei mais que executar alguns comandos na consola, e sempre que pego num tutorial acabo por desistir e pensar que não é linguagem para mim.

Desta vez quero fazer uma aplicação em Python com interface gráfica, acesso a base de dados, processamento de XML e outros ficheiros de texto, por isso preciso de perceber bem como raio funciona esta coisa.

A sintaxe geral conheço, algumas das funções embutidas também. Não tenho problemas em usar os dicionários, listas, etc., mas há algumas coisas que me fazem confusão. Por exemplo, packages VS. módulos, recomendações para a criação e organização de classes, ah e sim, pretendo fazer tudo orientados a objectos.

Há por aí algum tutorial de Python que, além da sintaxe mostre como fazer algumas destas coisas, estilo Java Tutorial? Algum que não seja igual aos que estão por aqui no fórum e na wiki e na referência do Python, porque já por lá passei e as dúvidas são as mesmas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

amigo,

Não sei Java, mas quer algo mais simples que Tutoriais Python ?... será que existe?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres orientação a objectos usando o quê?

tk, wx, GTK, Qt...?

Para o wx, recomendo o <link removido>.. Para os outros não sei porque não uso...

Para teres um manual sempre à disposição, com um pouco de tudo e muito do importante, tens o Apress Beggining Python From Novice to Professional.

Depois, aconselho-te a dares uma vista de olhos no projecto Jython.

<link removido> tens vários livros de Python e alguns falam de Jython.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres orientação a objectos usando o quê?

tk, wx, GTK, Qt...?

Segundo consta, orientado a objectos não está dependente da interface gráfica, ou neste caso do toolkit gráfico usado ;)

amigo,

Não sei Java, mas quer algo mais simples que Tutoriais Python ?... será que existe?

Esse é que é o problema, são tão simples que acabam por explicar quase nada.

Usar o interpretador? Fazer do python uma calculadora? Dicionários e restantes estrutura? Isso é o básico, não preciso de nada disso e todos os tópicos/tutorias que vejo são disso.

Por exemplo, não encontrei em lado nenhum da documentação oficial uma forma recomendada para criar classes. Temos lá explicação sobre módulos,

A module can contain executable statements as well as function definitions. These statements are intended to initialize the module. They are executed only the first time the module is imported somewhere
.

Depois de ler isto até tenho medo de colocar a minha classe num módulo, coisas executadas na primeira vez que o módulo for importado? A minha classe vai ser executada?

O problema é que estou demasiado habituado ao Java, logo há muita coisa que vos pode parecer directa e para mim não é...  ainda estou em choque depois do que li sobre controlo de excepções aqui, http://docs.python.org/dev/howto/doanddont.html, como é que é possível um ficheiro não ser fechado num bloco finally? Alguém me explica?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não encontraste porque a informação que pretendes é publicada SEMPRE como um PEP. http://www.python.org/dev/peps/pep-0008/

O que tu leste sobre módulos é referente ao __init__, o construtor de cada classe.

Em relação ao finally, se percebi, em implementações que não a CPython, aquilo pode não funcionar como é suposto, porquê não me perguntes porque não sei. Como alternativa, eu faria:

try:
x = fp.read()
except IOerror:
pass
fp.close()

Que toolkit gráfico queres usar?

Para processamento de XML, queres usar o quê? DOM? SAX? XPath?

Para acesso a base de dados, o suporte ao SQlite já vem de origem. http://docs.python.org/lib/module-sqlite3.html

Mais dúvidas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que tu leste sobre módulos é referente ao __init__, o construtor de cada classe.

O que li é sobre módulos, não fala em lado nenhum de classes, porque é que dizes que é de classes?

try:
x = fp.read()
except IOerror:
pass
fp.close()

Considerando que sei pouco de python, esse código parece-me um pouco... um tiro no pé. Se ocorreu um erro não é suposto tratar o erro?!

Que toolkit gráfico queres usar?

Não sei, só pretendo que seja multi-plataforma, alguma recomendação?

Para processamento de XML, queres usar o quê? DOM? SAX? XPath?

DOM não deverá ser, provavelmente será SAX, só pretendo ler/escrever os ficheiros, os dados serão tratados de outra forma, em estruturas próprias.

Para acesso a base de dados, o suporte ao SQlite já vem de origem. http://docs.python.org/lib/module-sqlite3.html

Era esse que estava a pensar usar, mas já agora, ORM em python existe ou estou a sonhar demasiado alto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que li é sobre módulos, não fala em lado nenhum de classes, porque é que dizes que é de classes?

Módulos/classes, é quase a mesma coisa em Python. Um módulo quando importado tem a mesma sintaxe que uma instância de uma class. Por exemplo, tu em Java tens o módulo com.knitter.lulzware. Em Python, podes criar esse módulo da mesma maneira (pastas), ou então definir sem qualquer ordem e montar um objecto. Cada módulo tem um ficheiro (__init__.py) que serve para instanciar o módulo como objecto, tal como se faz com o método __init__ numa simples class.

Considerando que sei pouco de python, esse código parece-me um pouco... um tiro no pé. Se ocorreu um erro não é suposto tratar o erro?!

No caso de haver um IOerror (a exception a que é feito um raise quando existe um erro a ler de um ficheiro), nós já estamos à espera dele e fazemos o pass, da mesma forma que podiamos fazer um handling decente, aquilo não passou de um exemplo. Anyway, se houver outra (tipo, OSerror, KeyError), ela não é ignorada pelo pass, se é disso que tens medo. Mais sobre error handling (tens a sinxtaxe explicada em BNF): http://docs.python.org/ref/try.html

Não sei, só pretendo que seja multi-plataforma, alguma recomendação?

Para máxima compatibilidade, wxPython (vem do wxWidgets) ou PyGTK (usa o GTK).

DOM não deverá ser, provavelmente será SAX, só pretendo ler/escrever os ficheiros, os dados serão tratados de outra forma, em estruturas próprias.

http://docs.python.org/lib/module-xml.sax.html (artigo sobre o módulo: http://www.devarticles.com/c/a/XML/Parsing-XML-with-SAX-and-Python/)

Era esse que estava a pensar usar, mas já agora, ORM em python existe ou estou a sonhar demasiado alto?

Não faço a mínima ideia.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Módulos/classes, é quase a mesma coisa em Python. Um módulo quando importado tem a mesma sintaxe que uma instância de uma class. Por exemplo, tu em Java tens o módulo com.knitter.lulzware. Em Python, podes criar esse módulo da mesma maneira (pastas), ou então definir sem qualquer ordem e montar um objecto. Cada módulo tem um ficheiro (__init__.py) que serve para instanciar o módulo como objecto, tal como se faz com o método __init__ numa simples class.

Não percebi metade do que disseste te tenho dúvidas na metade que sobrou.

Afinal, uma classe e um módulo são a mesma coisa? Posso ter mais que uma classe num mesmo ficheiro?

Se não colocar os ditos ficheiros __init__.py dentro das pastas o que é que acontece?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Afinal, uma classe e um módulo são a mesma coisa? Posso ter mais que uma classe num mesmo ficheiro?

Classe:

class lulzware:
def __init__(self):
  self._x = []
  self._y = {'o': 3}

def getLulz(self):
  return self._x

Módulo: Pasta com vários ficheiros, tem exactamente a mesma organização e forma de funcionamento que os packages em Java. Quando fazes import modulo, ele constroi o objecto (o ficheiro class.py vai para modulo.class, lulz.py para o modulo.lulz, o extra/ois.py para modulo.extra.ois, o __init__.py para modulo.__init__). Quando instancias um objecto desse modulo, ele executar o __init__ (o construtor da class), que pode estar ou não definido.

Podes ter classes dentro de um módulo. Exemplo para o lulz.py acima:

class tiracio:
def __init__(self):
  self.__ois = []
def getOis(self):
  return self.__ois

Para instanciares esta class, fazes modulo.lulz.tiracio().

Se não colocar os ditos ficheiros __init__.py dentro das pastas o que é que acontece?

Replied above, não acontece nada.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

comeca pela organizacao mais simples. por defeito um script python e' um modulo e pode ser importado usando a instrucao

import nome_do_ficheiro_sem_a_extensao

depois podes la definir classes a tua vontade tal como outra linguagem qualquer, ao importares um modulo, o que o interpretador faz e' simplesmente avaliar o codigo desse ficheiro.

Como em qualquer outra linguagem quando o codigo de uma classe e' executado o unico metodo que e' automaticamente chamado e' o construtor. Que no caso do python tem sempre o nome __init__ e o seu primeiro parametro e' sempre um ponteiro para a propria classe.

nao tem muito mais que se lhe diga, e' uma abordagem mais simplificada que java ou c++ no que toca a sintaxe.

quanto a aprendizagem eu infelizmente tenho que concordar, a documentacao do python ainda esta longe de ser satisfatoriamente completa. So o basico e' que esta coberto compreensivamente. A documentacao do java.sun.com por exemplo esta noutro campeonato.

o que eu aconselho para aprender uma linguagem e' o que sempre faco: arranja um projecto pessoal, de preferencia pequeno, e usa a linguagem a aprender, neste caso o python. Vais ver que e' muito simples de usar.

ORM nao aconselho, nao ha nenhum modulo que esteja maduro o suficiente. Ha uns poucos mas ainda estao muito verdinhos e ainda nao ha nenhum que seja mantido por uma entidade solida, sao todos desenvolvidos por uma ou outra alma caridosa de uns amadores que ai andam.

Talvez daqui a um ano ou dois haja mais opcoes. Neste momento ate' em php estas melhor servido no que toca ORM.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei que o Django (framework web) tem Mapeamento objecto-relacional (ou ORM)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como em qualquer outra linguagem quando o codigo de uma classe e' executado o unico metodo que e' automaticamente chamado e' o construtor. Que no caso do python tem sempre o nome __init__ e o seu primeiro parametro e' sempre um ponteiro para a propria classe.

Isso será no python e não em qualquer outra linguagem, não gosto muito que seja executado código que eu não mandei.

nao tem muito mais que se lhe diga, e' uma abordagem mais simplificada que java ou c++ no que toca a sintaxe.

Já não é a primeira vez que me dizem isso, mas por mais que tente, não vejo no python simplificação nenhuma. Seria de esperar encontrar alguma facilidade no python, tendo em conta que aprendi a programar com C, mas sinceramente não consigo.

o que eu aconselho para aprender uma linguagem e' o que sempre faco: arranja um projecto pessoal, de preferencia pequeno, e usa a linguagem a aprender, neste caso o python. Vais ver que e' muito simples de usar.

É o que estou a tentar fazer mas queria fazer o raio da modelação do sistema e, não tendo algumas das bases de como a tecnologia funciona, acabei por fazer um modelo, que me parece não ser adequado.

ORM nao aconselho, nao ha nenhum modulo que esteja maduro o suficiente.

Isso vai ser incómodo, mas não será o maior dos meus problemas.

Bem, vou ver o que daqui saí.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol eu tive exactamente o mesmo problema quando tentei entrar no python, parece que falta sempre qualquer coisa, embora exista muita documentação parece que só tem o básico. Isso dos módulos também me fez confusão. Talvez um deste dias volte a tentar o python.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Knitter, eu estou a usar MySQL com a lib mysql para python e tenho-me dado bem. Quanto a XML uso uma outra lib chamada libxml2 que tem feito o trabalho (de ler, porque só leio XML, não escrevo) lindamente.

O problema não será usar uma biblioteca para aceder aos dados, teria de a usar de qualquer forma, fosse qual fosse a tecnologia, o problema é  implementar os padrões de acesso a dados correctamente, mas já começo a ver que não será em python, seria óptimo mas não vou perder o meu tempo com isso neste momento.

Para XML é que dava mesmo jeito conseguir escrever, pelo pouco que li, e pelo que é apregoado em todos os sítios que recomendam python, existirá um suporte para XML no python, que espero, seja mais que ler.

Esse link parecia a solução para os meus problemas, mas depois de ler algumas coisas que estavam escritas e começar a ver a comparação que ele apresenta, comecei a perguntar-me se o autor nunca usou Java e fez um mau trabalho de pesquisa, ou se é simplesmente um idiota. Ele diz com cada coisa.... a afirmação dele de que não consegues fazer um buffer overflow em pyhton ainda me está a bater no fundo do cérebro. Enfim, vou ver os textos todos até ao fim.

Obrigado pelo link.

EDIT:

Apanhei agora a parte referente a threads... Hum... python + thread = not thread safe! Global lock para se poder usar threads?

Desculpem, mas sinto-me a andar para trás.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora