curso basico python

Upload: rodrigo-dorado

Post on 12-Jul-2015

94 views

Category:

Documents


3 download

TRANSCRIPT

CursoBsicode

LeonardoArrudadoAmaralAndrade VIIEscolaRegionaldeInformticadaSBC IIIEncontrodeSoftwareLivrenoEspritoSanto(ESLES)

Sumrio

Parte0 Introduo Caractersticasgerais AlgumasaplicaesescritasemPython OndePythonutilizado? QuemusaPython? Parte1(focadoemaspectosgeraisdalinguagemeprogramaoprocedural) OinterpretadorPython Manipulandovariveis Palavrasreservadas Algunstiposbsicosdalinguagem Operadoresbooleanoselgicos Strings Cdigofontedeverdade Unicode Estruturasdecontrole(if,for,while) Estruturasdedadosdealtonvel(listas,tuplas,dicionrios) Funes

Sumrio

Parte1(focadoemaspectosgeraisdalinguagemeprogramaoprocedural) Mdulos Arquivos Parte2(focadoemaspectosdeorientaoaobjetos[OO]) Classeseobjetos Mtodoseatributos Heranaeheranamltipla Propriedades,classebaseeherana Atributosemtodosestticos Mtodosespeciaisesobrecarga Mecanismodeexcees

Parte0

IntroduoCriadaporGuidovanRossum(19901991),noInstitutoNacionaldeMatemticae CinciadaComputao(CWI)Amsterd,Holanda. Caractersticasgerais:

bastanteclara,sintaxelegvel,fcilaprendizagem

interpretadaeinterativa suporteavriosparadigmas:funcional,proceduraleorientadoaobjetos

multiplataforma(Windows,Linux/Unix,MacOSX,OS/2,Amiga,PalmHandheldse celularesNokia) tipagemdinmica(nonecessriodeclarartipos) compilaoemtempodeexecuo(onthefly) fortementetipada estruturasdealtonvel[listas,tuplas,dicionrios,etc]jdisponibilizadaspela linguagem orientadaaobjetos suporteamdulosepacotes bateriasinclusas(amplabibliotecapadro)

IntroduoCaractersticasgerais: fazoprogramadorseconcentrarnaresoluodoproblema(questescomo compilao,declaraodevariveis,sintaxecomplexa,etc). possibilidadedeintegraocomcdigoC,C++,Java(Jython),etc.

timalinguagemparaprototipagem,RAD(RapidApplicationDevelopment), extensoeintegraodeaplicaesecomponentes,scripts.

AlgumasaplicaesescritasemPython: GmailFS LumaLDAPBrowser PyMol Pythonuno(OOffice)

IntroduoOndePythonutilizado? ProgramaoWeb(CGI,Zope,Django,TurboGears,XML),Bancodedados(ODBD, MySQL,PyGresQL,etc.),educao,jogos(Pygames),redes,computaogrfica, bioinformtica,fsica,aplicaesnumricas,etc,etc,emaisetc. QuemdoidodeusarPython? Philips:controledeproduodemicrocontroladores ILM:integraodecomputadoreseaplicaesusadosemcomputaogrfica Nokia:aplicaesparaosseuscelulares Embratel:monitoramentodeinterfacesdobackbone Serpro:desenvolvimentodeaplicaesWeb Google RedHat NASA Conectiva OLPC etc.

Parte1 Parte1

OinterpretadorPython#Pythoncomoumacalculadora >>>3+4 7 >>>22#ComentarioemPython 0 >>>#divisaointeiraeharrendondadaparabaixo ...7/3 2 >>>7/3 3 >>> >>>2==2 True >>>print'EscrevePython!' EscrevePython! >>>(1+2j)+(3+4j) (4+6j)

ManipulandovariveisEmPython,nosedeclaratipodevariveis.Ostipossoinferidosdinamicamente (tipagem dinmica), ou seja, o tipo ao qual a varivel est associada pode variar durante a execuo do programa. No quer dizer que no exista tipo especfico definido(tipagemfraca).Asvariveisassumemumnicotipoemumdeterminado momento. >>>umInteiro=42 >>>type(umInteiro)#type()umafunobuildin >>>umFloat=43.01 >>>umLong=5L >>>a=b=c=0 >>>umInteiro*a 0 >>>umInteiro+umFloat 85.009999999999991

PalavrasreservadasListadaspalavrasreservadasdePython: and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while yield

Essaspalavrasnopodemserutilizadascomonomedevariveis.Sevocfor teimoso,receberumerrodesintaxe! Ah,existempalavrasqueaparentementesoreservadasmasnoso!Portanto podemsersobrescritasnaregiodecdigo.Estejaconscienteaofazerisso:>>>str(1) '1' >>>str="Vocpodemechamardelouco,maseuseioquetofazendo!" >>>str(1)#vocacabadeperderarefernciaafunostr! Traceback(mostrecentcalllast): File"",line1,in? TypeError:'str'objectisnotcallable >>>printstr Vocpodemechamardelouco,maseuseioquetofazendo!

Algunstiposbsicosdalinguagem>>>a=31; >>>a+1;a2;a*2;a/2;a//2;a%2;a**4;#operaescominteiros 32 29 62 15 15 1 923521 >>>#asoperaesacimavalemparafloat >>>a=31.0; >>>a/2;a//2;#diferenciandoosdoisoperadores 15.5 15.0 >>> >>>abs(31);divmod(31,2);oct(31);hex(31);#buildin's 31 (15,1) '037' '0x1f'

Algunstiposbsicosdalinguagem>>>frommathimport* >>>cos(0);sin(0);exp(0);log(10);log10(10);pi;e;pow(2,1/2);sqrt(2) 1.0 0.0 1.0 2.3025850929940459 1.0 3.1415926535897931 2.7182818284590451 1.0#[porqu?] 1.4142135623730951 >>> >>>#paranmeroscomplexos,utilizaseabibliotecacmath >>>fromcmathimport* >>>exp((complex(1,1))) (1.4686939399158851+2.2873552871788423j) >>>exp(1+0j) (2.7182818284590451+0j) >>>

OperadoresbooleanoselgicosOperadoresbooleanos >>>5==5;5==6;5!=7;5>7;#ataquicomoC! True False True False >>>3> #Valores podem ser convertidos para booleanos atravs de bool(valor). Normalmente, ser 'False' se o valor representar algo vazio dentro do seu domnio.Ex.:onmero0,umalistavazia,umastringvazia,umatuplavazia,None, etc. >>>#Operadoreslgicos >>>print(1and0,5and0,2and3,3and2)#seV,recebeosegundovalor! (0,0,3,2) >>>print(1or0,5or0,2or3,3or2,0or0)#seV,recebeoprimeirovalor! (1,5,2,3,0) >>>print(not1,not0,notTrue,notFalse,not"abacate",not"") (False,True,False,True,False,True)

Strings!Asstringssocadeiasdecaracteresquepodemserdelimitadasporaspas simples ou duplas, com igual efeito. Importante salientar que no existe o tipo char. Uma cadeia com um nico caractere visto como string pela linguagem.>>>a="Guerra" >>>a=a+"ePaz" >>>a+='!' >>>printa GuerraePaz! >>>len(a)#tamanhodeumastring 13 >>>a*3 'GuerraePaz!GuerraePaz!GuerraePaz!' >>>a[0:6]#slicing(fatiandostrings) 'Guerra' >>>a[6:] 'ePaz!' >>>a[:6] 'Guerra' >>>a[4:] 'Paz!'

Strings!>>>a[20]#erroaoacessarposioexistente! Traceback(mostrecentcalllast): File"",line1,in? IndexError:stringindexoutofrange >>>

Strings so imutveis! Isso significa, de modo prtico, que no possvel acessar e modificar diretamente um de seus caracteres. Existem tambm vriosmtodosrelacionadosaotipostring[str]quepodemservistosatravs de'help(str)'.>>>a[4] 'P' >>>a[4]='F'#stringssoimutveis Traceback(mostrecentcalllast): File"",line1,in? TypeError:objectdoesnotsupportitemassignment

Strings!Algunsmtodos: >>>a.lower() 'guerraepaz!' >>>a.upper() 'GUERRAEPAZ!' >>>a.split() ['Guerra','e','Paz!'] >>> >>>ord('a') 97 >>>help(str)#divirtase!

CdigofontedeverdadeAt aqui, utilizamos o interpretador na sua forma interativa. Agora, escreveremosnossosprogramasemarquivos. Algumaspequenasobservaes: >OsarquivosfontesdePython,porconveno,possuemextenso'.py' > Na famlia Unix, utilizase na primeira linha a localizao do interpretador Python.(noobrigatria) >Nasegundalinha,informaseaointerpretadorqualacodificaodecaracteres usada no cdigo. Se no informada, o interpretador assume que o cdigo foi escritoutilizandoseoscaracteresdatabelaASCii.

#!/usr/bin/python #*coding:iso88591* #!/usr/bin/envpython #*coding:utf8*

Qualamgicapordetrsdospanos?

OUnicodeAo informar a codificao, permitese que as strings nativas (escritas em ASCII no cdigo fonte) sejam traduzidas pelo programa para uma representaoUnicodedeformaautomtica. UnicodeumtipoemPython.Suasrepresentaes: u"Vouspouvezrpter,s'ilvousplat?" U"Vouspouvezrpter,s'ilvousplat?" u"""Vouspouvezrpter,s'ilvousplat?""" U"""Vouspouvezrpter,s'ilvousplat?""" Basicamentesuportaosmesmosmtodosdestring[str].

Estruturasdecontrole#Condicional'if'ifcondio: #blocodecdigo elifcondio: #outrobloco else: #blocofinal #identaocorretanecessria!Eladelimitaosblocos! #Noseadmiteatribuiescomocondiesdoif. # elif no obrigatria mas til (por exemplo, menus). Substitui a construo switch/casedeC.

Estruturasdecontrole#Condicional'if'(exemplo)#!/usr/bin/envpython #*coding:utf8* print""" RestaurantedoZequinha Mandaquempode,obedecequemtemjuzo! """ pedido=raw_input("Oquedesejaalmoar?\n") ifpedido=="arroz": print"Sim,senhor.Temosarroz,soR$5!" elifpedido=="feijo": print"Sim,senhor.Temosfeijo,R$10!" elifpedido=="panquecas": print"Aspanquecasestofrias.SoR$3cada!" else: print"Stemosarroz,feijoepanquecas!"

Estruturasdecontrole#Lao'for'forvariavelinsequncia: #blocodecdigo | else: #blocoexecutadonaausnciadeumbreak #SintaxebastantediferentedeC,prximaadelinguagensdescript. #Asseqnciasnormalmentesoumalistas,tuplasoudicionrios. #parasefazerumlaocomnmerofixodeiteraes,talcomoemC,utilizasefor emconjuntocomafunorange(quegeraseqnciasdenmeros).

Estruturasdecontrole#Lao'for'(exemplo)#!/usr/bin/envpython #*coding:utf8* print""" VendadoMarquito """ print"Produtos:" lista=["caf","leite","macarro","fub"] forprodutoinlista: print">"+produto print"\nMarquitocontaatcinco.\n" foriinrange(1,6): print">"+str(i) else: print"Marquitoumcaraesperto!"

Estruturasdecontrole#Lao'while'whilecondio: #blocodecdigo | else: #blocoexecutadonaausnciadeumbreak #Semsurpresas!

Estruturasdecontrole#Lao'while'(exemplo)#!/usr/bin/envpython #*coding:utf8* #!/usr/bin/envpython #*coding:utf8* print""" Espera! """ paciencia=10 while(paciencia>0): print"Tohcalmo!" paciencia=1 if(paciencia==5): break; else: print"Naoentroaqui!"

print"Vaimeatenderounaovai?"

Estruturasdedadosdealtonvel#Listas>>> listamista = [1, 1.4, 1+1j, "Qualquer tipo", ["lista dentro de lista"]] #a lista polimrfica(comportampraticamentetodosostiposdeobjetos) >>>printlistamista [1,1.3999999999999999,(1+1j),'Qualquertipo',['listadentrodelista']] >>>listamista[0]#indexvel 1 >>>listamista[1:3]#fatiamento [1.3999999999999999,(1+1j)] >>>listamista[3]="Entendi!"#mutvel >>>printlistamista [1,1.3999999999999999,(1+1j),'Entendi!',['listadentrodelista']] >>> >>>[]#listavazia [] >>>len(listamista) 5

Estruturasdedadosdealtonvel#Listas>>>range(1,5) [1,2,3,4] >>>matrix=[[1,2,3],[4,5,6],[7,8,9]]#construodematrizescomlistas >>>matrix[0][0];matrix[1][1];matrix[2][2] 1 5 9 Com as listas providas pela linguagem, possvel criar tambm outras estruturasdedadoscomofilas,pilhas,etc.utilizandoseosmtodosdotipo list.

Estruturasdedadosdealtonvel#Listas>>>lista=[15,10,5,30,25,20] >>>lista.append(35);lista#adicionandoumelementoaofinaldalista [15,10,5,30,25,20,35] >>>lista.reverse();lista#'invertendo'alista [35,20,25,30,5,10,15] >>>lista.pop();lista#retirandooltimoelementodalista 15 [35,20,25,30,5,10] >>>lista.remove(5);lista#retirandoonmero5dalista [35,20,25,30,10] >>>lista.sort();lista#ordenandoalista [10,20,25,30,35]

Estruturasdedadosdealtonvel#Tuplas>>> tuplamista = (1, 1.4, 1+1j, "Qualquer tipo", ("tupla dentro de tupla")) #tuplas tambmsopolimrficas >>>printtuplamista (1,1.3999999999999999,(1+1j),'Qualquertipo','tupladentrodetupla') >>>tuplamista[0]#indexvel 1 >>>tuplamista[1:3]#fatiamento (1.3999999999999999,(1+1j)) >>>tuplamista[3]="Erronacara!"#imutvel Traceback(mostrecentcalllast): File"",line1,in? TypeError:objectdoesnotsupportitemassignment >>>()#tuplavazia () >>>len(tuplamista) 5

Estruturasdedadosdealtonvel#TuplasOndeusada? Especial importncia quando se precisa de uma estrutura imutvel. utilizadapararetornodemltiplosvaloresdeumafuno. >>>help(tuple) Nohnenhummtodocomum(comoappend,sort,etc.)paraotipotupla.

Estruturasdedadosdealtonvel#Dicionrios(Mapeamentos/TabelasHash)>>>dict={"chave":"valor"} >>> dicionario = {"Iraque":"Asia", "Brasil":"Amrica", "Espanha":"Europa", "Austrlia":"Oceania","Congo":"frica"} >>>printdicionario["Brasil"] Amrica Diferentemente das listas e tuplas (que so indexados por inteiros) so indexados por chaves (keys). Essas chaves podem ser apenas de tipos imutveis(inteiros,strings,tuplas*,...). Dicionriopodeservistocomoumconjuntonoordenadodepareschaves valor,ondeaschavessonicasparaumaestruturadicionrio.

Estruturasdedadosdealtonvel#Dicionrios(Mapeamentos/TabelasHash) Asprincipaisoperaesemumdicionriosoarmazenarerecuperarvalores apartirdechaves. >>>tel={"Alberto":5432,"Fernanda":5432,"Felisberto":5321,"Godines":6453} >>>tel["Godines"]#qualotelefonedeGodines? 6453 >>>tel["Fernanda"]=2000#Fernandamudoudetelefone! >>>tel {'Godines':6453,'Fernanda':2000,'Felisberto':5321,'Alberto':5432} >>>tel.pop("Godines")#Godinesnotemmaistelefone 6453 >>>tel#ordenaoemdicionrionuncagarantida {'Fernanda':2000,'Felisberto':5321,'Alberto':5432} >>>print(tel.keys(),tel.values())#quaissoaschavesevaloresdodicionrio? (['Fernanda','Felisberto','Alberto'],[2000,5321,5432]) >>>tel.has_key("Felisberto") True >>>"Godines"intel False

Estruturasdedadosdealtonvel#Dicionrios(Mapeamentos/TabelasHash) #Atualizandoumdicionrio: >>>tel={"Fernanda":2000,"Felisberto":5321,"Alberto":5432} >>>mudancatel={"Fernanda":2005,"Ana":3001,"Felisberto":3454} >>>tel.update(mudancatel)#fazendoasatualizaesdetelefones >>>tel {'Fernanda':2005,'Ana':3001,'Alberto':5432,'Felisberto':3454}

Funesdefnome_funcao(arg_1,arg_2,...,arg_n): # #blocodecdigocontendoocorpodafuno # returnvalor_de_retorno#retornaropcional Ex.: >>>defsoimprimo(parametro): ...printparametro ... >>>soimprimo("RRRRRRRRRRRRRonaldiiiiiiiiinho!") RRRRRRRRRRRRRonaldiiiiiiiiinho! >>> >>>soimprimo("Obina"+"vaivoltar!") Obinavaivoltar!

Funes#Valorespadro(defaultvalues) >>>defdividir(num=0.0,den=1.0): ...printnum/den ... >>> >>>dividir()#semparmetro,assumeosvalorespadro 0.0 >>>dividir(5,2)#num=5,den=2!Observeoresultado. 2 >>> dividir(den=4, num=16) #posso dizer explicitamente a quais parmetros estoumereferindoecomissomudaraordemdosparmetros 4 >>>dividir(5)#num=5,denigualaovalorpadro(1.0) 5.0 Apsvalorespadronopodemhaveroutrosparmetrossemvalorpadro.

Funes#Mltiplosvaloresderetorno >>>defretorna2(numero): ... return numero,"Mensagem de status" #isso uma forma de representar tuplas ... >>>retorna2(500) (500,'Mensagemdestatus') >>>

Funes#Parmetrosarbitrrios>>>deffexemplo(n,*opc,**opc_com_nome): ...print"Tupladeargumentosopcionais:",opc ...print"Dicionariodeargumentosopcionais:",opc_com_nome ... >>>fexemplo(1,2,3,4,a=95,c=43,texto="Textossaotextos,nadamais",d=(1,3)) Tupladeargumentosopcionais:(2,3,4) Dicionariodeargumentosopcionais:{'a':95,'c':43,'texto':'Textossaotextos,nada mais','d':(1,3)} >>> Valores opcionais 'sozinhos' entram na tupla de argumentos opcionais. Valores opcionais passados e atribudos a uma varivel so guardados no dicionriodeargumentosopcionais.

Funeseescopodevariveis#issofunciona v=1 deff(): printv #issonofunciona v=1 deff(): printv v=10 #[UnboundLocalError] #issofazoquevoctentoufazeracima v=1 deff(): globalv printv v=10 Variveisglobaisspodemseralteradasdentrodeumafunoseexplicitamenteditas comoglobais.

MdulosMdulo um arquivo contendo cdigo Python, so anlogos s bibliotecas deC. Importaodemdulos>>>importmath#importaummdulointeiro... >>> math.sqrt(2) #... mas necessrio informar o nome do mdulo para acessar seus componentes. 1.4142135623730951 >>> >>>frommathimportsqrt#importadomduloumcomponenteespecfico >>>sqrt(2)#oscomponentesestoacessveisdiretamente 1.4142135623730951 >>> >>>frommathimport*#importandotodoomdulo >>>sqrt(2)#acessodiretoatodososcomponentesdomdulo 1.4142135623730951 >>> >>>frommathimportsqrt,pi#importandocomponentesespecficos >>>pi 3.1415926535897931

MdulosListandooscomponentesdeummdulo>>> dir(math) # na verdade, dir serve para listar os componentes de qualquer objeto (introspeco) ['__doc__','__file__','__name__','acos','asin','atan','atan2','ceil','cos','cosh','degrees','e', 'exp','fabs','floor','fmod','frexp','hypot','ldexp','log','log10','modf','pi','pow','radians','sin', 'sinh','sqrt','tan','tanh']

MdulospadroPythonosinterfacecomosistemaoperacional email,smtplibmanipulaodeemails,protocoloSMTP picklepersistnciadeobjetos reexpressesregulares mathfunesmatemticasreais cmathfunesmatemticascomplexas randomgeraodeseleesaleatrias picklepersistnciadedados urllib2acessoaurls zlib,gzip,bz2,zipfile,tarfilecompresso gtkbibliotecagrfica datetimemanipulaodedataseintervalosdetempo timeitmediodedesempenhodecdigo doctest,unitestcontroledequalidade,facilitaogerenciamentodetestes xml.dom,xml.sax,csvsuporteaxml,csv threadingsuporteathreads gettext,locale,codecsinternacionalizao(i18n) Eetc,etc,etcemaisetc.

Trabalhandocomarquivos(files)Manipular arquivos simples. Python prov o tipo 'file' e seus mtodos facilitam o trabalho do programador. Em alguns aspectos, a sintaxe parecidacomadeC. >>>f=open("meuarquivo.txt","w")#abrindoarquivocompermissodeescrita >>>f.write("Aquiestou,\nEscrevendoemarquivos!")#escrevendo... >>>f.close()#fechando >>>f=open("meuarquivo.txt","rw")#abrindonovamenteemmodor/w >>>f.read()#loarquivointeiro 'Aquiestou,\nEscrevendoemarquivos!' >>>f.seek(0)#reposicionao'apontador'deleituraparaoinciodoarquivo >>>f.readline()#lumalinhadecadavez... 'Aquiestou,\n' >>>f.readline()#outra... 'Escrevendoemarquivos!' >>>f.readline()#outratentativa!Retornoustringvazia(fimdearquivo) '' >>>f.close()

Trabalhandocomarquivos(files)Principaismtodosdotipo'file'f=open(arq.txt,r)#abreparaleitura f=open(arq.txt,w)#abreparaescrita f=open(arq.txt,a)#abreparaescritaaofinaldoarquivo f.close()#fechaoarquivo texto=f.readlines()#ltodasaslinhasdoarquivoeascopiapara'texto' linha=file.readline()#copiaaprximalinhadoarquivoparaastring'linha' f.write(texto)#escreveastring'texto'noarquivo f.seek(posicao)#posicionao'apontador'der/wdoarquivoparaaposio(em bytes)especificada Outrosmtodosemaisinformaes:>>>help(file)#divirtase! Caractersticadeleitura/escrita usandoosmtodosde'file':Osmtodosde leituraretornamstrings,eosparmetrosdosmtodosdeescritasostrings. necessrioconverterobjetosdeoutrostipos(int,complex,tuple,etc.)para stringantesdegravaremarquivos.

Trabalhandocomarquivos(Pickle)Strings podem ser facilmente escritas e lidas de um arquivo. Outros tipos precisam ser convertidos antes. Para estruturas de dados mais complexas, esseprocessopodesetornarinconvenienteemaiscomplicado. Para que no sejam necessrias essas converses, utilizase o mdulo padro pickle, que permite que praticamente qualquer objeto Python seja convertidoparaumarepresentaostring,persistindoo. Representado como string, o objeto pode ser armazenado em arquivo, transferidopelarede,etc. A forma de representao humanamente entendvel, embora no se recomende a manipulao direta da representao gerada com os mtodos providospor'file'. Mtodosprincipaisdepickle:dumpeload.

Trabalhandocomarquivos(Pickle)Exemplo: >>>f=open("exemplopickle.txt","w") >>>importpickle >>>pickle.dump(54.3,f) >>>pickle.dump([11,22,33,55],f) >>>f.close() >>> >>>f=open("exemplopickle.txt","rw") >>>x=pickle.load(f) >>>x 54.299999999999997 >>>type(x) >>>y=pickle.load(f) >>>y [11,22,33,55] >>>type(y)

Parte2

ClasseseobjetosClasses agrupam um conjunto de objetos com propriedades (atributos) e habilidadedeaes(mtodos)semelhantes. Objetossoinstnciasdasclasses(cadaobjetopossuiumaidentidade). Sintaxebsica: classnome_da_classe: #definiodefuncionalidadesepropriedadesdaclasse

Classeseobjetos(exemplo1)Exemplo1: #classecarro classCarro: #atributosdosobjetosdaclasse fabricante=Ford cor=Vermelho nome=Fiesta motor=2.0 estado=ligado #ummtododaclasse defrebaixado(): self.nome=Premio #ummtodoqueireiimplementardepois(utilizaode'pass') deftrocaMotor(motor): pass

Classeseobjetos(exemplo1)#instanciandoumobjeto meupoize=Carro() #acessodiretoaosatributosdaclasse meupoize.motor=1.0 meupoize.nome=Fiat147 meupoize.estado=desligado

Essa forma de se trabalhar com OO, permite que os atributos e mtodos possam ser invocados diretamente por agentes externos. Nesse caso, os atributos,mtodoseataprpriaclasseCarrodoexemplo1sochamados depblicos. EssaformadeacessobastantesemelhantesstructsdeC,nasquaisseus componentessodiretamenteacessveis.

MtodoseatributosMtodosdefinemasfuncionalidadesdaclasse.Soanlogossfunesdo mundoprocedural. Atributosdefinemaspropriedadesdaclasse. EmPython,ummtodoouatributopodeserpblicoouprivado. Os componentes pblicos so acessveis diretamente por qualquer outro objeto. Os componentes privados s podem ser acessado internamente por componentesdoprprioobjeto,nosendoacessveldiretamenteanenhum outroobjeto. Diferentemente de Java, no h definio da permisso protegido (protected). A sintaxe para informar que um dado componente privado iniciar seu nomecomdoissublinhados.

Mtodoseatributos#declarandocomponentescomoprivados __atributoprivado=1 __metodoprivado() Noexemplo2,serovistosalgunsdetalhessobreoscomponentesprivados em Python. Ser aproveitado tambm para mostrar a utilizao do mtodo __init__()[queanlogoaoconstrutordeoutraslinguagens]. Tambmserobservadaautilizaodapalavraself,quetemcomofuno explicitar que estamos nos referindo a componentes do prprio objeto ( anlogoao'this'deJava). Ah!, o exemplo 2 (classeCarroex2.py) est disponvel apenas em arquivo fonte,nosendocolocadodiretamentenessaapresentao.

HeranaeheranamltiplaHeranaummecanismoquepermitequecaractersticascomunsadiversas classessejamfatoradasemumaclassebase,ousuperclasse. Cada classe derivada (subclasse) apresenta as caractersticas da superclasseeacrescentaousobrescreve(mecanismodesobrecarga)oque fordefinidodeparticularidadesparaela. Sintaxe: classClasseBase1: #corpodaclassebase1 classClasseBase2: #corpodaclassebase2 classClasseDerivada1(ClasseBase1): #corpodaclassederivada1[exemplodeheranasimples] classClasseDerivada2(ClasseBase1,ClasseBase2): #corpodaclassederivada2[exemplodeheranamltipla]

ObservaesimportantesParaverificarseumobjetopertenceaumadeterminadaclasseoutipo: isinstance(objeto,classe/tipo) >>>isinstance([1,2,3],list) True >>>isinstance(1.4,int) False >>>

Paraverificarseumaclassesubclassedeoutra: issubclass(subclasse, superclasse) #retorna verdadeiro tambm se o primeiroeosegundoargumentoforemaprpriaclasse.

ObservaesimportantesParacopiarobjetos: >>>importcopy >>>copia=copy.copy(objeto_a_ser_copiado)

Propriedades,classebaseeheranaHumamaneiradiferentedefazerosmtodosgeteset. Exemplo: classClasseQualquer(object): def__init__(self,parametro=None): self.__qualquer=parametro defgetQualquer(self): returnself.__qualquer defsetQualquer(self,argumento): self.__qualquer=argumento privado=property(getQualquer,setQualquer) objeto=ClasseQualquer() printobjeto.privado objeto.privado=32 printobjeto.privado

AtributosemtodosestticosMtodos e atributos so ditos estticos quando so comuns a todos os objetosdeumaclasse. classClasseFulana(object): contador=0 def__init__(self): ClasseFulana.contador+=1#atributoesttico print"Classeinstanciadapela",ClasseFulana.contador,"a.vez\n" defqtdInstancias(): print"AclasseClasseFulanapossui",ClasseFulana.contador, "instancia(s)" instancias=staticmethod(qtdInstancias)#declarandoummtodocomo esttico

MtodosespeciaisesobrecargaEm Python, a sobrecarga de operadores feita a partir da definio de mtodosespeciaisdaclasse. __add__>sobrecargadaadio __sub__>sobrecargadasubtrao __mul__>sobrecargadamultiplicao __div__>sobrecargadadiviso __mod__>sobrecargadoresto __pow__>sobrecargadapotncia(**) __iadd__>sobrecargade+= __isub__>sobrecargade= __imul__>sobrecargade*= __idiv__>sobrecargade/= __lt__>sobrecargade< __eq__>sobrecargade== __cmp__>sobrecargadocomparador(ordenao) __str__>sobrecargadaformataodoprint Etc,etceetc...

MecanismodeexceesExceesindicamquealgumtipodecondioexcepcionalocorreudurantea execuodoprograma,logo,exceesestoassociadasacondiesdeerro emtempodeexecuo. Elas podem ser geradas/lanadas (quando sinalizado que uma condio excepcional ocorreu) e capturadas (quando feita a manipulao (tratamento) da situao excepcional, onde as aes necessrias para a recuperaodesituaodeerrosodefinidas. Na prtica, acontece que a maioria das excees no tratada e acabam resultandoemmensagensdeerro.Exemplos: >>>1/0 Traceback(mostrecentcalllast): File"",line1,in? ZeroDivisionError:integerdivisionormodulobyzero >>>f=open("arquivoquenaoexiste","r") Traceback(mostrecentcalllast): File"",line1,in? IOError:[Errno2]Nosuchfileordirectory:'arquivoquenaoexiste'

MecanismodeexceesExemplos: >>>"string"+3 Traceback(mostrecentcalllast): File"",line1,in? TypeError:cannotconcatenate'str'and'int'objects >>> >>>a=int(raw_input("Entrecomumnumero:")) Entrecomumnumero:teimoso Traceback(mostrecentcalllast): File"",line1,in? ValueError:invalidliteralforint():teimoso >>> Etc,etceetc...

TratamentodeexceeswhileTrue: try: x=int(raw_input("Nobresenhoresenhora,digiteumnumero:")) break exceptValeuError: print"Meusenhor...minhasenhora...Issonoumnmerovlido.Vail, entreoutravez!" Otryfuncionadaseguinteforma: Primeiramente,oconjuntodecomandosentreaspalavrasreservadastry eexcept(denominadadeclusulatry)executado. Se no for gerada exceo, a clusula except ignorada e termina a execuodaconstruotry.

TratamentodeexceesSe ocorrer uma exceo durante a execuo da clusula try, os comandosqueaindafaltamserexecutadosnelasoignorados.Seotipode exceoocorridativersidoprevistocomalgumaclusulaexcept,entoessa clusulaserexecutada.Aofimdaclusulatambmterminaaexecuodo trycomoumtodo. Se a exceo ocorrida no foi prevista em nenhum tratador except da construo try em que ocorreu, ento ela entregue a uma construo try mais externa. Se no existir nenhum tratador previsto para tal exceo (excees nomanipuladas), a execuo encerra com uma mensagem de erro. Uma observao oportuna que podese tratar vrias excees diferentesdemesmomodoutilizandoseumanicaclusulaexcept. Exceespodemserlanadascomapalavrareservada'raise'.