1. O documento discute a linguagem de programação Python, apresentando suas principais características como data de criação, sintaxe, tipagem, multiplataforma e ambiente interativo.
2. É apresentado um exemplo de código Python que ilustra o uso de classes, herança e composição de objetos.
3. São discutidos diversos editores de código e IDEs disponíveis para o desenvolvimento em Python, tanto opções gratuitas como proprietárias.
1. Python WTF?
tamb´m conhecido como Python What a FAQ?
e
Osvaldo Santana Neto <osvaldo.neto@openbossa.org>
20 de junho de 2007
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
2. Python
Uma introdu¸˜o obrigat´ria
ca o
Criada por Guido van Rossum em 1991
Nome provˆm do programa de TV Monty Python and the
e
Flying Circus
Sintaxe simples e f´cil de ser assimilada
a
Linguagem Orientada ` objetos com suporte aos paradigmas
a
estrutural e funcional
Tipagem Forte e Dinˆmica
a
Multiplataforma
Interpretada (compila para bytecode e interpreta)
Ambiente Interativo
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
3. Python
Um exemplo obrigat´rio
o
class Component ( object ):
def __init__ ( self , * kargs ):
self . _components = list ( kargs )
def add ( self , component ):
self . _components . append ( component )
def __str__ ( self ):
ret = quot; quot;
for component in self . _components :
ret = quot; % s % s quot; % ( ret , component )
return ret
class Normal ( Component ): pass
class Bold ( Component ):
def __str__ ( self ):
return quot; <b >% s </ b > quot; % ( component . __str__ ( self ))
class Italic ( Component ):
def __str__ ( self ):
return quot; <i >% s </ i > quot; % ( component . __str__ ( self ))
para = Normal ( quot; isto e um texto normal quot; )
para . add ( Bold ( quot; , este e negrito quot; ))
para . add ( Bold ( Italic ( quot; e este e negrito / italico quot; )))
print para
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
4. IDEs
Linguagem de Programa¸˜o n˜o ´ IDE
ca a e
IDE n˜o ´ linguagem de Programa¸˜o
ae ca
“Uma coisa ´ uma coisa, outra coisa ´ outra coisa”.
e e
– Desconhecido
IDE n˜o ´ s´ um editor de texto
aeo
Nem toda IDE possui um editor de telas
Nem sempre ´ necess´rio usar uma IDE
e a
IDEs: Eclipse, Visual Studio, Komodo, Delphi, Netbeans, ...
Editores de Texto: Vi, Emacs, jEdit, Notepad, ...
Linguagens de programa¸˜o: Python, Java, Lisp, C, C++, ...
ca
N˜o irei comentar sobre todas as ferramentas dispon´
a ıveis
http://pythonbrasil.com.br/moin.cgi/IdesPython
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
5. IDEs Livres
Eclipse
Caracter´
ısticas:
Autocompletion
Syntax Highlight
Navega¸˜o em c´digo
ca o
Verifica¸˜o de c´digo (PyLint)
ca o
Unit Test
Integra¸˜o com Depurador
ca
Integra¸˜o com VCSs
ca
http://www.easyeclipse.org/
A vers˜o do Eclipse empacotada pelo grupo EasyEclipse j´
a a
acompanha diversos plugins uteis no desenvolvimento Python,
´
entre eles o PyDev.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
6. IDEs Livres
Pida
Caracter´
ısticas:
Autocompletion
Syntax Highlight
Verifica¸˜o de c´digo
ca o
(PyFlakes)
Integra¸˜o com editor de tela
ca
(Gazpacho)
Integra¸˜o com VCSs
ca
http://pida.berlios.de/
Um dos pontos fortes do Pida ´ a possibilidade de escolher entre
e
um editor de textos do pr´prio projeto ou o Vi para trabalhar com
o
a edi¸˜o dos arquivos. Ele trabalha com o Gazpacho que ´ um
ca e
desenhador de telas que usa o toolkit GTK+.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
7. IDEs Livres
Boa-Constructor
Caracter´
ısticas:
Autocompletion
Syntax Highlight
Navega¸˜o em c´digo
ca o
Integra¸˜o com editor de tela
ca
Integra¸˜o com Depurador
ca
http://boa-constructor.sf.net/
O foco principal dessa IDE s˜o as aplica¸˜es gr´ficas. Ela
a co a
propositalmente tenta imitar o visual do Delphi (apesar de algumas
pequenas diferen¸as).
c
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
8. IDEs Propriet´rias
a
Wing IDE
$179 (Pro) / $35 (Personal)
Caracter´
ısticas:
Autocompletion
Syntax Highlight
Navega¸˜o em c´digo
ca o
Integra¸˜o com Depurador
ca
Integra¸˜o com VCSs
ca
http://wingide.com/
Essa IDE ´ muito conhecida entre os programadores Python pois
e
foi uma das primeiras dispon´
ıveis para se trabalhar com essa
linguagem. Os desenvolvedores Zope a utilizam principalmente por
sua ferramenta de depura¸˜o integrada.
ca
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
9. IDEs Propriet´rias
a
Komodo IDE
$295
Caracter´
ısticas:
Autocompletion
Syntax Highlight
Navega¸˜o em c´digo
ca o
Verifica¸˜o de c´digo
ca o
Integra¸˜o com Depurador
ca
Integra¸˜o com VCSs
ca
http://activestate.com/
Essa IDE ´ ideal para desenvolvedores que trabalham com
e
aplica¸˜es Web. Ela ´ projetada especialmente para esse tipo de
co e
desenvolvimento.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
10. Editores de Texto Livres
Vi - http://vim.org - Editor muito conhecido no universo
dos Unix. Curva de aprendizado ´
ıngreme mas extremamente
poderoso.
Emacs - http://gnu.org/software/emacs - Editor muito
conhecido no universo dos Unix. Curva de aprendizado menos
´
ıngreme que a do Vi. O Emacs tamb´m ´ extremamente
ee
poderoso e ´ um dos principais rivais do Vi.
e
jEdit - http://jedit.org/ - Editor de textos multiplataforma
tem uma riqu´ıssima biblioteca de plugins extremamente uteis
´
para desenvolvedores.
Outros - SciTE, jExt, Scribes1 , Gedit, Kate, ...
1
http://scribes.sf.net/
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
11. Editores de Texto Propriet´rios
a
Komodo Edit - http://activestate.com - Gr´tis - A vers˜o
a a
reduzida da IDE Komodo mencionada anteriormente conta
apenas com as funcionalidades de editor de textos.
TextMate (OS X) - http://macromates.com - e39 - O editor
´
de textos mais badalado do universo Apple. E extremamente
f´cil de usar e poderoso e pode ser personalizado atrav´s de
a e
scripts.
UltraEdit (Win) - http://ultraedit.com/ - $49.95 - Velho
conhecido dos programadores Windows esse editor de textos
ainda “bate um bol˜o”entre eles.
a
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
12. Primeira grande quest˜o
a
Que IDE/Editor de textos usar?
Menos ´ mais - Prefira IDEs mais simples de serem usadas.
e
Seu foco tem que ser “aprender Python”e n˜o a IDE. Nessa
a
linha de racioc´ prefira editores de textos ` IDEs.
ınio a
2 . Tive que aprender a usar Vi para trabalhar
Eu uso... - Vi
com Linux e desde ent˜o ele supre as minhas necessidades
a
totalmente.
Sim, ´ dif´ de aprender a us´-lo.
e ıcil a
Mas uma vez aprendido ele ´ o melhor. :)
e
E se eu usasse uma IDE?
Seria Komodo com dinheiro, ...
...Eclipse sem dinheiro ou...
...Pida (com Vi) depois de pronto. :)
2
O Scribes tamb´m parece interessante
e
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
13. Toolkits Gr´ficos
a
Crit´rios para a escolha de um Toolkit gr´fico
e a
Licenciamento - Eu posso usar o toolkit livremente? Se
minha aplica¸˜o n˜o for livre, tenho que pagar?
ca a
Aparˆncia - A minha aplica¸˜o vai ter a aparˆncia padr˜o da
e ca e a
plataforma? Vai ficar mais feia? Mais bonita?
Ferramentas - Eu vou ter que desenhar minhas telas no meu
programa ou posso usar um editor para isso?
Dependˆncia - Vou ter que adicionar mais uma dependˆncia
e e
para minha aplica¸˜o?
ca
Plataforma - O toolkit escolhido funciona em v´rias
a
plataformas?
Toolkits dispon´
ıveis: Tkinter, PyGtk, PyQt, wxPython,
PyFLTK, PXPy, Anygui, PySWT, PyUi, ...
N˜o irei comentar sobre todos os toolkits dispon´
a ıveis
http://pythonbrasil.com.br/moin.cgi/ComparacaoDeGUIs
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
14. Toolkit Gr´fico
a
PyGtk
Licen¸a: LGPL
c
Aparˆncia: Gtk+
e
Dependˆncias: Gtk+
e
Plataformas: Win, OS X,
Linux
http://pygtk.org/
Editores de telas: Gazpacho, Glade
Bibliotecas: Eagle, PyMVC
Framework: Kiwi (MVC)
Aplica¸˜es: http://www.pygtk.org/applications.html
co
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
15. Toolkit Gr´fico
a
PyQt
Licen¸a: GPL (ou Qt
c
Licence)
Aparˆncia: Qt/Nativa
e
Dependˆncias: Qt
e
Plataformas: Win, OS X,
Linux
riverbankcomputing.co.uk/pyqt
Editores de telas: Qt Designer
Bibliotecas: PyKDE
Aplica¸˜es: V´rias aplica¸˜es KDE
co a co
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
16. Toolkit Gr´fico
a
wxPython
Licen¸a: wxWidgets (BSD)
c
Aparˆncia: Nativa
e
Dependˆncias: wxWidgets
e
Plataformas: Win, OS X,
Linux
http://wxpython.org/
Editores de telas: wxGlade, wxDesigner (propriet´rio)
a
Aplica¸˜es: Chandler, Juice, PySoulSeek, ...
co
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
17. Segunda grande quest˜o
a
Que toolkit gr´fico usar?
a
Para escolher o melhor, dˆ pesos aos items que devem ser
e
avaliados em um toolkit gr´fico, dˆ notas ` esses quesitos
a e a
para cada um dos toolkits e calcule a m´dia ponderada.
e
Experimente os dois melhores colocados desenvolvendo uma
mini-aplica¸˜o.
ca
Eu uso... - PyGtk. Usei o m´todo descrito acima.
e
Sim, eu tive que usar isso no trabalho
N˜o gosto de dois componentes GTK: TreeView e TextView.
a
Dˆ uma olhada no Eagle e no Kiwi
e
Eu n˜o gosto de desenvolver aplica¸˜es standalone. Prefiro
a co
desenvolvimento Web. Empresas como o Google est˜o a
mostrando que o futuro est´ dentro do navegador.
a
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
18. Framework Web
Ao escolher um framework Web avalie os seguintes itens:
Popularidade - Os frameworks Web mais usados contam com
um conjunto de m´dulos e plug-ins muito maior do que os
o
outros.
Atividade - Veja se o desenvolvimento do framework ´ ativo.
e
Documenta¸˜o - Exija documenta¸˜o organizada, completa e
ca ca
de f´cil entendimento. Conte´dos multim´ como screencasts
a u ıdia
tamb´m s˜o importantes.
e a
Experimente - Esse item ´ o mais importante. Vocˆ tem que
e e
experimentar os frameworks que mais te interessaram porque
s´ assim vocˆ vai conseguir descobrir se ele ´ mais adequado `
o e e a
sua aplica¸˜o.
ca
Frameworks Web: Django, TurboGears, Pylons, Zope/Plone,
Webware, CherryPy, Quixote, Twisted Woven, Spyce, ...
N˜o irei comentar sobre todos os frameworks existentes
a
http://www.pythonbrasil.com.br/moin.cgi/PythonParaWeb
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
19. Framework Web
Django
Documenta¸˜o: Muito
ca
completa e organizada
Uso: Extremamente f´cil
a
Template: Django
Persistˆncia: Django ORM
e
http://djangoproject.com/
O projeto Django nasceu na onda dos frameworks Web ´geis onde
a
o Ruby on Rails foi pioneiro. O framework ´ muito bem
e
implementado e a documenta¸˜o merece men¸˜o honrosa. A
ca ca
comunidade tamb´m ´ muito ativa.
ee
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
20. Framework Web
TurboGears
Documenta¸˜o:
ca
desorganizada
Uso: Extremamente f´cil
a
Template: Kid, Genshi ou
ZPT
Persistˆncia: SQLObject ou
e
SQLAlchemy
http://turbogears.org/
O Turbogears ´ o mais f´cil de ser usado. O fato dele ser s´ um
e a o
aglutinador de outros frameworks tamb´m o torna muito mais
e
flex´
ıvel. Mas o seu defeito ´ a documenta¸˜o que ´ pouca,
e ca e
defasada e desorganizada.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
21. Framework Web
Plone (Zope)
Documenta¸˜o: razo´vel
ca a
Uso: Complexo
Template: ZPT
Persistˆncia: ZODB / BDs
e
relacionais
http://plone.org/
O Plone n˜o ´ exatamente um framework Web mas a sua
ae
flexibilidade ´ t˜o grande que o torna um concorrente destes. Ele ´
ea e
desenvolvido em Zope e esse sim ´ um software grande e complexo
e
(mas extremamente poderoso).
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
22. Terceira grande quest˜o
a
Que framework Web usar?
N˜o existe f´rmula m´gica para facilitar a escolha. Tem que
a o a
experimentar cada um deles
O GvR escolheu o Django
Eu uso... - TurboGears agora. Mas vou usar Django no
futuro
Eu usei o TurboGears porque comprei o livro e queria justificar
o investimento.
Eu gosto mais do sistema de mapeamento de URL do TG.
Eu ainda n˜o experimentei o Pylons3 , mas ouvi boas hist´rias
a o
sobre ele
Existe uma inten¸˜o dos desenvolvedores do Pylons e do
ca
TurboGears de trabalhar em conjunto.
3
http://pylonshq.com/
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
23. Banco de Dados
Evite escolher Bancos de Dados. Prefira usar frameworks que
abstraiam o Banco de Dados.
Exceto se o Banco de Dados for Orientado ` Objetos
a
Frameworks: SQLObject, SQLAlchemy, ZODB, Durus...
Bancos de Dados: SQLite, MySQL, PostgreSQL, Oracle,
MsSQL, ODBC, ...
N˜o irei comentar sobre todos os frameworks ou Bancos de
a
Dados existentes
http://pythonbrasil.com.br/moin.cgi/BancosDeDadosSql
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
24. Banco de Dados
SQLObject
Exemplo:
from sqlobject import *
__ co nn ect ion__ = quot; sqlite ://: memory : quot;
class Permission ( SQLObject ):
p e r mi s s ion_name = UnicodeCol ( length =16 ,
alternateID = True ,
a l t e r n a t e M e t h o d N a m e = ’ b y _ p e r mi s s i o n _ n a m e ’)
description = UnicodeCol ( length =255)
groups = RelatedJoin ( ’ Group ’ ,
i nt er m ed ia t eT a bl e = ’ gr oup_ perm issi on ’ ,
joinColumn = ’ permission_id ’ ,
otherColumn = ’ group_id ’)
O SQLObject permite fazer o mapeamento objeto-relacional de
maneira muito simples e r´pida. O banco de dados usado ´
a e
definido atrav´s da vari´vel connection . O acesso ao BD fica
e a
transparente para o desenvolvedor que ir´ lidar com objetos na
a
maior parte do tempo.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
25. Banco de Dados
SQLAlchemy
Exemplo:
from sqlalchemy import *
from sqlalchemy . ext . assignmapper import assign_mapper
p e r m i s s i o n s _ t a bl e = Table ( ’ permission ’ , metadata ,
Column ( ’ permission_id ’ , Integer , primary_key = True ) ,
Column ( ’ permission_name ’ , Unicode (16) , unique = True ) ,
Column ( ’ description ’ , Unicode (255))
)
class Permission ( object ): pass
def assign (* args , ** kw ):
return assign_mapper ( session . context , * args , ** kw )
assign ( Permission , permissions_table ,
properties = dict ( groups = relation ( Group ,
secondary = group_permission_table , backref = ’ permissions ’ )))
O SQLAlchemy usa um outro sistema de trabalho que d´ mais
a
flexibilidade ao mapeamento objeto-relacional. Isso o torna ideal
para o desenvolvimento de aplica¸˜es que precisar˜o usar bancos
co a
de dados legados.
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
26. Banco de Dados
Outras alternativas
ZODB - Banco de Dados orientado ` objetos, n˜o utiliza o
a a
modelo relacional de banco de dados.
DB-API - API Python padronizada para acesso ` bancos de
a
dados relacionais.
SQLite - Acompanha o Python 2.5
MySQL - mysqldb
PostgreSQL - psycopg2
Oracle - cx oracle
Exemplo com MySQL:
# Para conectar outros bancos , somente essa parte muda
import MySQLdb
con = MySQLdb . connect ( ’ servidor ’ , ’ usuario ’ , ’ senha ’)
con . select_db ( ’ banco de dados ’)
# Fim
cursor = con . cursor ()
cursor . execute ( ’ ALGUM SQL ’)
con . close ()
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
27. Quarta grande quest˜o
a
Que Banco de Dados usar?
A regra de outro aqui ´: afaste-se o m´ximo poss´ do
e a ıvel
banco de dados.
Se for usar um banco de dados relacional use um mapeador
objeto-relacional
Eu uso... - SQLAlchemy, mas sonho e poder usar s´ o ZODB
o
O SQLAlchemy parece ser melhor mantido que o SQLObject e
sua documenta¸˜o impressiona pela qualidade
ca
O ZODB tem fama de n˜o escalar bem e n˜o ´ bem suportado
a ae
por outros frameworks que n˜o o Zope
a
Como o SQLite acompanha o Python ele se mostra uma
excelente alternativa para o desenvolvimento ou para a
execu¸˜o de testes (usando o banco de dados em mem´ria).
ca o
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?
28. Quinta grande quest˜o
a
Qual o sentido da vida, do universo e de tudo mais?
Perguntas?
http://www.indt.org.br/
Osvaldo Santana Neto <osvaldo.neto@openbossa.org> Python WTF?