Вы находитесь на странице: 1из 49

Python

Orientao a Objetos

Marcel Pinheiro Caraciolo


Python Aula 05

Definindo classes
... Noes de Orientao a
Objetos

Python Aula 05

... E tudo so
objetos...

Tudo em Python no fim um objeto!

hello.upper()
Python Aula 05

list3.append(a)

... Definindo uma


classe...

Python no usa o conceito de definio de


interfaces como em outras linguagens.
Basta voc definir a clase e utiliz-la!
Python Aula 05

... Mtodos em
classes...

Definir um mtodo em uma classe , basta


incluir a definio da funo seguindo o
escopo de bloco da classe.

Em todos mtodos associados instncia definido dentro de uma


classe devem ter o argumento self definido como primeiro
argumento.

H geralmente um mtodo especial __init__ definido na maioria


das classes.

Python Aula 05

Definio de uma
classe

Python Aula 05

Orientao a
objetos
Criando e Deletando instncias

Python Aula 05

Instanciando Objetos
No h new como feito em Java!

a = student(Sheldon, 34 ) (** sem o operador new! )

__init__ serve como construtor de uma


classe. Geralmente faz o trabalho de
inicializao.

No h limite para o nmero de argumentos passados para


o mtodo __init__ . Como em qualquer outra funo, os
argumentos podem ser definidos com valores default,
tornando-os assim opcionais ao chamador

Python Aula 05

Instanciando Objetos

self

: O primeiro argumento de qualquer


mtodo a referncia para a prpria
instncia da classe

Em __init__ self referencia o objeto


criado
recentemente,
e
em
outros
mtodos, referencia a instncia de qual o
mtodo foi invocado.

Similar ao this usado em Java ou C++

Porm Python usa mais self do que Java com this

Python Aula 05

__init__

Python Aula 05

10

self
No

necessrio inclu-lo no mtodo que


faz a chamada do mesmo, apenas na
definio!

Python passa ele automaticamente.


a = Automovel()
print a.get_placa()

Python Aula 05

11

Deletando instncias
Quando

estiver finalizado com o objeto,


voc no precisa delet-lo ou liber-lo
explicitamente.

Python possui garbage collection de forma automtica.

Python ir automaticamente detectar quando todas as


referncias para um trecho de memria estiver no sendo mais
referenciado. Automaticamente, a memria liberada.

Poucos leaks de mmoria, e no h mtodos destrutores em


Python!

Python Aula 05

12

Desvendando a
classe...
Acesso de atributos e mtodos

Python Aula 05

13

Acessibilidade
Acesso de mtodos e atributos

Diretamente
objeto.atributo
objeto.getAtributo()

ou

por

algum

mtodo

a = Automovel()
print a.n_rodas

Python Aula 05

14

Acessibilidade

Atributos (class e ou instncias)

Privados

Atributos e mtodos s podem ser acessados dentro


da classe, usa-se __ no nicio do nome.

Protected

Apenas conveno e usa-se apenas um _ no nome


de mtodos ou atributos

Python Aula 05

15

Especial: property
class Fone(object):
(...)
def pegar_volume(self):
return self.volume
.

volume = property(pegar_volume,alterar_volume)

Python Aula 05

16

Especial: property
>>>fone = Fone(200)
>>>fone.pegarVolume()
100
>>>fone.volume
100
>>>fone.volume = - 50
0
>>>fone.volume = 200
>>>fone.volume
100

Python Aula 05

17

Atributos
Como declarar os membros de
uma classe ?!

Python Aula 05

18

Atributos
Exceto mtodos,

todos os demais dados


dentro de uma classe so armazenados
como atributos.

Atributos de instncia

Variveis que pertencem a uma instncia particular da


classe

Cada instncia tem o seu prprio valor para o atributo


Os mais freqentes em classes

Atributos de classe

Variveis que pertencem classe como um todo.


Todas as instncias da classe compartilham o mesmo
atributo (valor).
Python Aula 05
Conhecidos como estticosem outras linguagems

19

Atributos
Atributos

de instncia so criados
inicializados pelo mtodo __init__()

Simplesmente atribuindo um valor a um rtulo

Dentro da classe, referir-se ao atributo usando self

Exemplo: self.full_name

Python Aula 05

20

Atributos

Atributos

de classe so compartilhados
(apenas uma cpia) por todas instncias da
classe.

Qualquer instncia alter-lo, o valor alterado para todas


instncias.

Atributos de classe so definidas:

Dentro da definio de uma classe


Fora de quaisquer mtodos da classe

J que estes atributos so compartilhados por todas


instncias de uma classe, eles so acessados atravs de
uma notao diferente:

self.__class__.name
Python Aula 05

21

Herana
Python uma linguagem de
programao...

Python Aula 05

22

Herana
Uma

classe pode herdar a definio de


outra classe

Permite o uso ou a extenso de mtodos e atributos


previamente definidos por outra classe.

Nova classe: subclasse.


superclasse

Para definir uma subclasse, coloque o nome da superclasse


entre parnteses depois do nome da subclasse na primeira
linha da definio.

Original: classe pai, ancestral ou

Python no tem a palavra extends como em Java

Mltipla herana suportada


Python Aula 05

23

Herana

Python Aula 05

24

Redefinindo mtodos
Voc pode redefinir mtodos declarados na
superclasse

O mesmo vale para o mtodo __init__ .

Geralmente voc algo assim no mtodo __init__ das


subclasses:

parentClass.__init__(self,x,y)

onde parentClass o nome da classe pai.

Python Aula 05

25

Redefinindo mtodos

Python Aula 05

26

Redefinindo mtodos

Python Aula 05

27

Herana

Python Aula 05

28

Alguns mtodos e atributos


speciais nativos
I am special!

Python Aula 05

29

Membros nativos
As

classes contm mtodos e atributos


especiais que so includos por Python
mesmo
se
voc
no
os
defina
explicitamente.

A maioria destes mtodos so invocados automaticamentos


a partir de alguma ao ou evento por meio de operadores
ou uso da classe.

Algums atributos nativos definem informaes que devem


ser armazenadas para todas as classes.

Todos os membros nativos tem 2 underscores ao redor dos


nomes: __init__ , __doc__
Python Aula 05

30

Membros nativos

Alguns

mtodos como por exemplo


__repr__ existem para todas as classes e
voc pode sempre redefin-las.

A definio deste mtodo especifica como


tornar a instncia de uma classe em uma
string.

print f algumas vezes chama f.__repr__() para chamar a


representao em string do objeto f

Se voc digitar f e pressionar ENTER, ento voc tambm


est chamando __repr__ para informar ao display o que
deve ser exibido ao usurio
Python Aula 05

31

Mtodos nativos
Voc

pode
tambm:

redefinir

estes

mtodos

__init__ : O construtor da classe

__cmp__: Define como == funciona para a classe

__len__ : Define como len(obj) funciona

__copy__ : Define como copiar uma classe

Outros mtodos nativos permitem voc dar a classe o poder


de usar notao [] como um array ou () como uma chamada
de funo.
Python Aula 05

32

Mtodos nativos

Python Aula 05

33

Atributos especiais
Estes

atributos existem para todas as


classes.

__doc__
classe.

__class__:
Retorna a referncia classe de qualquer
instncia dela.

__module__ : Retorna a referncia ao mdulo que aquela


classe em particular foi definida.

Outro mtodo bem til dir(x) retorna a lista de todos os


mtodos e atributos definidos pelo objeto x.

Armazena a documentao (string) para a

Python Aula 05

34

Tratamento de excees
Fatal Error! E
agora?!

Python Aula 05

35

Try/Except
Python tenta executar o cdigo de programa
dentro do bloco inserido dentro do try.

Caso algum erro acontea, uma exceo


levantada!

Seu programa interrompido por alguma falha em tempo de


execuo.

except permite tratar as excees levantadas. O


programador define como lidar com estes erros
inesperados!
Python Aula 05

36

Try/Except

Voc pode capturar vrios tipos de exceo!

Python Aula 05

37

raise
Se voc no desejar naquele bloco de cdigo tratar
a exceo, voc pode optar por levantar a exceo
para a chamada cujo o bloco foi chamado.

No final de contas, alguem tem que tratar exceo! Voc est


apenas adiando o inevitvel! Importante quando voc quer que
outro desenvolvedor monte tratamento de excees
customizadas.

Python Aula 05

38

Finally
Tenta remediar a situao, ltima ao antes do
estouro da exceo ou fim do try.

Sempre executado antes do fim de um comando try.

Python Aula 05

39

Exemplo

Python Aula 05

40

Voc pode criar suas


excees!!
Sua classe deve herdar da classe diretamente ou
indiretamente da classe Exception

Mtodos redefinidos: __init__ e __str__

Python Aula 05

41

Exerccio 01

Python Aula 05

42

Exerccio 01

Python Aula 05

43

Exerccio 02

Python Aula 05

44

Exerccio 02

Python Aula 05

45

Documentao

Python Aula 05

46

Exerccio 03
Gere a documentao dos mdulos desenvolvidos
no Exerccio 02.

DICA: Procurar no HELP do comando pydoc como fazer para


gerar a documentao de um pacote com vrios mdulos

Python Aula 05

47

Referncias

Python Aula 05

48

Python
Orientao a Objetos

Marcel Pinheiro Caraciolo


Python Aula 05

49

Вам также может понравиться