Curso de Python em 5 Horas

Documentos relacionados
Programação de Jogos em Python

Programando em Python Aula 1

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Python: Exceções, Iteradores e Geradores. Claudio Esperança

Produtividade e qualidade em Python através da metaprogramação

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Computação II (MAB 225)

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Python para quem sabe Python

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Luciano Ramalho dezembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Introdução à Programação Aula 3 Primeiros programas

Fundamentos da Programação

Errata* do livro Programação em Python Fundamentos e Resolução de Problemas

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Programação I Aula 3 Primeiros programas

Projeto de Linguagem. Linguagens de Programação

Programação Orientada a Objetos em Python

Fundamentos da Programação

Processamento da Informação Teoria. Exercícios sobre strings

Computação 1 - Python Aula 12 - Teórica: Interação com o usuário e programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 25

Fundamentos de Lógica e Algoritmos. Aula 3.2 IDLE, Variáveis e Tipos. Prof. Dr. Bruno Moreno

Objetivos do mini curso. Conhecer a linguagem. Noção de programação utilizando Python. Aprender o báscio.

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Computação 1 - Python Aula 11 - Teórica. programa principal. João Carlos, Carla Delgado, Ana Luisa Duboc 1/ 29

INSTRUÇÕES DE REPETIÇÃO

MAC2166 Introdução à Computação

Algoritmos e estrutura de dados

Programação orientada a objetos

Computação 1 - Python Aula 6 - Teórica: Listas 1/ 28

Palavras Reservadas da Linguagem Java

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Arquivos O QUE É, COMO LER E MANIPULAR

Programação por Objectos. Java

Estruturas de Dados Pilhas, Filas, Listas

1 Da aula teórica ao Java

Python. Resumo e Exercícios P3

Preparação para Maratona de Informática PYTHON

1 Expressões, valores e tipos 1. 2 Variáveis e atribuições 5. cálculo de expressões segue a estrutura de parênteses e as prioridades dos operadores

Processamento da Informação Teoria Funções

Nomes, vinculações e escopos

Microservices com

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Aula 28: Arquivos de texto

MCG126 Programação de Computadores II

Luciano Ramalho setembro/2012. Objetos Pythonicos. Orientação a objetos e padrões de projeto em Python

Nomes, vinculações e escopos

Análise de Programação

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Linguagem de Programação III

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python

Python: Classes. Claudio Esperança

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Algoritmos e estrutura de dados

Transcrição:

Curso de Python em 5 Horas Classes e Trabalhando com Arquivo Gustavo Sverzut Barbieri GPSL - UNICAMP 12 de maio de 2005 ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 1 / 37

Resumo Esta aula apresenta o uso de classes e também como trabalhar com arquivos e entrada e saída em geral. O material de apoio a ser utilizado se encontra em: Python para já programadores: http: //www.gustavobarbieri.com.br/python/aulas_python/aula-01.pdf Resumo: http: //www.gustavobarbieri.com.br/python/aulas_python/resumo.pdf ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 2 / 37

1 Classes 2 Trabalhando com Arquivos 3 Referências ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 2 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 3 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 4 / 37

Classes: Sintaxe class NOME_DA_CLASSE ( CLASSE_PAI_1, CLASSE_PAI_2 ): """ Documentacao da classe. """ ATRIBUTOS_DE_CLASSE def init ( self, PARAMETROS ): CODIGO_DO_CONSTRUTOR def METODO ( self, PARAMETROS ): CODIGO_DO_METODO ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 5 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 6 / 37

Classes new-style Desde a unificação dos tipos na versão 2.2 do Python, todos as classes devem herdar de object e são chamadas de new-style-classes. Por compatibilidade, ainda pode-se criar classes à moda antiga (clássicas). Porém classes clássicas não se beneficiam dos recursos providos: Sem super() Herança múltipla é precária, sem obj. mro Sem conceito de propriedades: property() Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 7 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 8 / 37

Classes: Exemplo Básico import datetime class Pessoa ( object ): def init ( self, nome, nascimento ): self. nome = nome self. nascimento = nascimento def idade ( self ): delta = datetime. date. today () - self. nascimento return delta. days / 365 def str ( self ): return %s, % d anos % ( self. nome, self. idade () ) gustavo = Pessoa ( Gustavo Sverzut Barbieri, datetime. date ( 1982, 6, 19 ) ) print gustavo. idade () print gustavo ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 9 / 37

Classes: Exemplo Avançado class Ethernet ( object ): def init ( self, name, mac_address ): self. name self. mac_address class Wireless ( Ethernet ): def init ( self, name, mac_address ): Ethernet. init ( self, name, mac_address ) class PCI ( object ): def init ( self, bus, vendor ): self. bus = bus self. vendor = vendor class USB ( object ): def init ( self, device ): self. device = device ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 10 / 37

Classes: Exemplo Avançado (Continuação) class PCIEthernet ( PCI, Ethernet ): def init ( self, bus, vendor, name, mac_address ): PCI. init ( self, bus, vendor ) Ethernet. init ( self, name, mac_address ) class USBWireless ( USB, Wireless ): def init ( self, device, name, mac_address ): USB. init ( self, device ) Wireless. init ( self, name, mac_address ) wlan0 = USBWireless ( usb0, wlan0, 00:33:44:55:66 ) eth0 = PCIEthernet ( pci :0:0:1, realtek, eth0, 00:11:22:33:44 ) print isinstance ( wlan0, Ethernet ) # True print isinstance ( eth0, PCI ) # True print isinstance ( eth0, USB ) # False ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 11 / 37

Classes: Exemplo Avançado (Diagrama) USB +device Ethernet +name +mac_address PCI +bus +vendor Wireless USBWireless PCIEthernet ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 12 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 13 / 37

Atributos de Classe São atributos que estão na classe, não na instância São compartilhados entre todas as instâncias (economia de memória) Os valores são instanciados/atribuídos ao ler a definição de classe Úteis para casos como Jogos, onde uma imagem deve ser compartilhada por todos os personagens idênticos, economizando memória Úteis para fazer lock em regiões críticas, evitar condições de corrida, etc... Perigoso para programadores descuidados! ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 14 / 37

Atributos de Classe: Exemplos class C( object ): l = [] c1 = C() c2 = C() c1.l. append ( 1 ) print c1. l # imprime [ 1 ] print c2. l # imprime [ 1 ] print C. l # imprime [ 1 ] c2.l. append ( 2 ) print c1. l # imprime [ 1, 2 ] print c2. l # imprime [ 1, 2 ] print C. l # imprime [ 1, 2 ] C.l. append ( 3 ) print c1.l # imprime [ 1, 2, 3 ] print c2.l # imprime [ 1, 2, 3 ] print C.l # imprime [ 1, 2, 3 ] Veja o próximo slide, sobre resolução de atributos para entender melhor. ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 15 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 16 / 37

Resolução de Atributos Classes "old-style" Classes "new-style" 1 Instancia 1 Instancia 2 Classe 2 Classe 3 5... n Classe Pai 1 Classe Pai 2 Classe Pai N 3 4... x Classe Pai 1 Classe Pai 2 Classe Pai N 4 Classe Pai Pai 1 6 Classe Pai Pai 2 y Classe Pai Pai 1 z Classe Pai Pai 2 Em objetos de old-style classes a pesquisa é recursiva. Em objetos de new-style classes a pesquisa segue uma ordem mais lógica, que pode ser vista em obj. mro. Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 17 / 37

Resolução de Atributos: Herança em Diamante Classes "old-style" Classes "new-style" 3 A 4 A +metodo() +metodo() 2 B C 2 B 3 C +metodo() +metodo() 1 D 1 D d = D() d.metodo() d = D() d.metodo() Old-Style: Chama A.metodo(), o que é um problema, sendo que as funcionalidades de C devem depender de C.metodo(). New-Style: Chama C.metodo(), o que é o esperado. Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 18 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 19 / 37

Métodos Estáticos São métodos que não precisam de uma instância ou classe para serem chamados, parece com o conceito de métodos estáticos em C++ e Java. Exemplo: class C( object ): def f (): print metodo estatico f = staticmethod ( f ) C.f () # imprime metodo e s t a t i c o c = C() c.f () # imprime metodo e s t a t i c o Atenção A linha essencial é: f = staticmethod( f ), ela redefine o método previamente declarado como um método estático. ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 20 / 37

Métodos de Classe São métodos que são chamados sobre a classe, ao invés da instância. Exemplo: class C( object ): def f( classe ): print metodo da classe :, classe f = classmethod ( f ) C.f () # imprime metodo da c l a s s e : < c l a s s m a i n.c > c = C() c.f () # imprime metodo da c l a s s e : < c l a s s m a i n.c > Atenção A linha essencial é: f = classmethod( f ), ela redefine o método previamente declarado como um método da classe, ao invés de método da instância. ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 21 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 22 / 37

Atributos Públicos e Privados Nomenclatura define atributos/métodos públicos e privados Privados: nomes que se iniciam com e não terminam com. Públicos: os outros nomes possíveis. Convenciona-se que atributos/métodos que se iniciam e terminam com (portanto públicos) são de uso interno da classe, apesar de poderem ser utilizados pelo mundo externo. A proteção é feita por mistura de nomes e pode ser burlada (flexibilidade para o programador): class C( object ): privado_classe = 1 def init ( self ): self. privado_instancia = 2 c = C() print c. _C privado_classe print c. _C privado_instancia ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 23 / 37

Propriedades: Acesso de Escrita, Leitura dos Atributos new-style classes provê o conceito de propriedade, o qual pode ter os acessos de escrita e leitura controlados por métodos: class C( object ): def init ( self ): self. x = None def getx ( self ): print getx () return self. x def setx ( self, valor ): print setx (, valor, ) if isinstance ( valor, int ): self. x = valor else : raise TypeError ( x precisa ser inteiro! ) x = property ( getx, setx ) c = C() c.x = 1 c.x = abc # TypeError : x p r e c i s a s e r i n t e i r o print c. x ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 24 / 37

Propriedades: Exemplo mais real def gera_propriedade_tipo ( nome, tipo, valida, errmsg ): attr = %s % nome def get ( self ): return getattr ( self, attr ) # g e t ( ) def set ( self, valor ): if isinstance ( valor, tipo ): if valida ( valor ): setattr ( self, attr, valor ) else : raise ValueError ( errmsg ) else : raise TypeError ( errmsg ) # s e t ( ) return property ( get, set ) # g e r a p r o p r i e d a d e t i p o ( ) ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 25 / 37

Propriedades: Exemplo mais real (2) def gera_propriedade_str ( nome, tam_max ): def valida ( valor ): return len ( valor ) <= tam_max # v a l i d a ( ) msg = ( % s precisa ser " str " e ter \ menos que % s letras ) % ( nome, tam_max ) return gera_propriedade_tipo ( nome, str, valida, msg ) # g e r a p r o p r i e d a d e s t r ( ) def gera_propriedade_int ( nome, min, max ): def valida ( valor ): return min <= valor <= max # v a l i d a ( ) msg = %s precisa ser " int " entre %s e %s % \ ( nome, min, max ) return gera_propriedade_tipo ( nome, int, valida, msg ) # g e r a p r o p r i e d a d e s t r ( ) ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 26 / 37

Propriedades: Exemplo mais real (3) class Pessoa ( object ): nome = gera_propriedade_str ( " nome ", 20 ) rg = gera_propriedade_str ( " rg", 9 ) idade = gera_propriedade_int ( " idade ", 1, 150 ) p = Pessoa () p. nome = 10 # TypeError p. nome = " Este texto tem mais de 20 letras " # ValueError p. idade = " 200 " # TypeError p. idade = 200 # ValueError p. nome = " Gustavo " # Ok! p. idade = 22 ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 27 / 37

CONTINUE CLASSES!!! continue-me!!!! ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 28 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 29 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 30 / 37

Lendo um Arquivo Lendo todo o conteúdo para a memória: arquivo = open ( nome_arq. txt ) conteudo = arquivo. read () arquivo. close () Lendo todas as linhas para a memória (lista): arquivo = open ( nome_arq. txt ) linhas = arquivo. readlines () arquivo. close () Lendo uma quantidade específica de bytes: arquivo = open ( nome_arq. txt ) comeco = arquivo. read ( 20 ) # 2 0 p r i m e i r o s b y t e s arquivo. close () ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 31 / 37

Lendo um Arquivo (2) Lendo com laços: arquivo = open ( nome_arq. txt ) for linha in arquivo : # i d e n t i c o a a r q u i v o. r e a d l i n e s ( ) print linha, arquivo = open ( nome_arq. txt ) while True : linha = arquivo. readline () if linha == : break print linha, ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 32 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 33 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 34 / 37

Referências utilizadas nesta aula Python Tutorial http://docs.python.org/tut/tut.html Python Library Reference http://docs.python.org/lib/lib.html Python Language Reference http://docs.python.org/ref/ref.html Python para já Programadores http://www.gustavobarbieri. com.br/python/aulas_python/aula-01.pdf ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 35 / 37

Panorama 1 Classes Sintaxe Classes new-style Exemplos Atributos de Classe Resolução de Atributos Métodos Estáticos e de Classe Proteção de Atributos 2 Trabalhando com Arquivos Leitura 3 Referências Referências utilizadas nesta aula Contato Gustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 36 / 37

Contato Gustavo Sverzut Barbieri Email: barbieri@gmail.com Website: http://www.gustavobarbieri.com.br ICQ: 17249123 MSN: barbieri@gmail.com Jabber: gsbarbieri@jabber.org Obtenha esta palestra em: http://palestras.gustavobarbieri.com.br/python-5hs/ ustavo Sverzut Barbieri (GPSL - UNICAMP) Curso de Python em 5 Horas 12 de maio de 2005 37 / 37