0% acharam este documento útil (0 voto)
4 visualizações20 páginas

Python l03

O documento aborda conceitos avançados de programação em Python, focando em classes, herança, propriedades e sobrecarga de operadores. Inclui exemplos práticos de implementação de classes e exercícios para reforçar o aprendizado. A estrutura do documento é organizada em tópicos que detalham a criação e manipulação de classes em Python.

Enviado por

alipio_resende
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações20 páginas

Python l03

O documento aborda conceitos avançados de programação em Python, focando em classes, herança, propriedades e sobrecarga de operadores. Inclui exemplos práticos de implementação de classes e exercícios para reforçar o aprendizado. A estrutura do documento é organizada em tópicos que detalham a criação e manipulação de classes em Python.

Enviado por

alipio_resende
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Python

Luiz Eduardo Borges


TI-CENPES
Python (parte IV)

• Classes
• Métodos
• Construtores e destrutores
• Atributos
• Herança
• Propriedades
• Classes abertas
• Sobrecarga de operadores
Classes

• São a estrutura básica da orientação a objetos


• Podem ter herança simples ou múltipla
• São abertas (menos para os tipos builtins)
• Métodos especiais são identificados por nomes
no padrão “__metodo__”
• Classes new style são derivadas de object e
podem utilizar recursos novos, como as
properties
• A maneira como as classes são criadas pode ser
personalizada através de metaclasses.
Classes (criando objetos)

Objeto
Atributos de
Classe classe
Atributos de
Métodos de
classe
Objeto = Classe() classe
Métodos de
classe Métodos
estáticos
Métodos
estáticos Métodos
dinâmicos

Atributos de
O construtor é executado neste
momento. objeto
Classes (herança simples)

Classe Antiga

Atributos Métodos

class Nova(Antiga):
Classe Nova
Atributos Métodos
antigos antigos

Atributos Métodos
redefinidos redefinidos

Atributos Métodos
novos novos
Classes (herança múltipla)

Ordem de resolução Object 5

3 Terrestre Aquático 4

1 Carro Barco 2

class Anfibio(Carro, Barco): Anfíbio 0


Classes (sintaxe)

Herança (múltipla)
class Classe(supcl1, supcl2):
"""Isto é uma classe"""
Isto é atributo de classe.
clsvar = []
Isto é um método especial.
def __init__(self, args):
"""Construtor da classe"""
<codigo>
Isto é um método especial.
def __done__(self):
"""Destrutor da classe"""
<codigo>

def metodo(self, params): O método dinâmico só pode ser


"""Método dinâmico""" chamado se a classe for
<codigo> instanciada.
Classes (sintaxe)

Isto é um decorador.
@classmethod
"""Método de classe"""
def cls_metodo(cls, params):
<codigo>

@staticmethod
"""Método estático"""
def est_metodo(params):
<codigo>
Novo objeto do tipo Classe.

obj = Classe()
[Link]()
Métodos de classe e estáticos
Classe.cls_metodo() podem ser chamados
Classe.est_metodo() diretamente.
Classes (exemplo)

Cell herda object.


class Cell(object):
"""Classe para células de planilha"""
def __init__(self, formula='""', format='%s'):
[Link] = formula
[Link] = format
def __repr__(self):
return [Link] % eval([Link])

print Cell('123**2')
Novo objeto do tipo Cell.
print Cell('23*2+2')
print Cell('abs(-1.45 / 0.3)', '%2.3f')

15129
48
4.833
Herança (exemplo)

class Pendrive(object):
def __init__(self, size, usb='2.0'):
[Link] = size
[Link] = usb Esta é a classe base.

class MP3Player(Pendrive):
def __init__(self, size, usb='2.0', turner=False):
[Link] = turner
Pendrive.__init__(self, size, usb)

mp3 = MP3Player(1024) Construtor (da classe base)

print '%s\n%s\n%s' % ([Link], [Link], [Link])


Properties

Não faça isso!


# get_*, set_*...

class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo

def get_velocidade(self):
return [Link] / [Link]

moab = Projetil(alcance=10000, tempo=60)


print moab.get_velocidade()
Properties (exemplo)

# Property de leitura

class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo O decorador transforma o
método em uma propriedade da
@property classe.
def velocidade(self):
return [Link] / [Link]

moab = Projetil(alcance=10000, tempo=60)


print [Link]

Sintaxe mais limpa.


Properties (exemplo)

# Property de leitura & escrita

class Projetil(object):
def __init__(self, alcance, tempo):
[Link] = alcance
[Link] = tempo
def getv(self):
Calcula a velocidade.
return [Link] / [Link]
def setv(self, v): Recalcula o tempo.
[Link] = [Link] / v
velocidade = property(getv, setv)

moab = Projetil(alcance=10000, tempo=60)


[Link] = 350
print [Link]
Classes abertas

class User(object): User não tem senha.


def __init__(self, name):
[Link] = name

def set_password(self, password):


[Link] = password Função que recebe a senha.

User.set_password = set_password

user = User('guest') Agora User pode receber a


user.set_password('guest') senha.
print dir(user)
print [Link]
Guest
Sobrecarga de operadores

class String(str): String amplia str.

def __sub__(self, s): Método especial para subtração.

return [Link](s, '')

s1 = String('The Lamb Lies Down On Broadway')


s2 = 'Down '

print '"%s" - "%s" = "%s"' % (s1, s2, s1 - s2)

Utilizando o operador.
"The Lamb Lies Down On Broadway" - "Down " =
"The Lamb Lies On Broadway"
Exercícios

1. Crie uma classe que modele um quadrado, com


um atributo lado e os métodos: mudar valor do
lado, retornar valor do lado e calcular área.

2. Crie uma classe derivada de lista com um método


retorne os elementos da lista sem repetição.
Exercícios

3. Implemente uma classe chamada Carro com as


seguintes propriedades:
• Um veículo tem um certo consumo de
combustível (medidos em km / litro) e uma certa
quantidade de combustível no tanque.
• O consumo é especificado no construtor e o nível
de combustível inicial é 0.
• Forneça um método mover(km) que receba a
distância em quilômetros e reduza o nível de
combustível no tanque de gasolina.
Exercícios

• Forneça um método gasolina(), que retorna o


nível atual de combustível.
• Forneça um método abastecer(litros), para
abastecer o tanque.
Exercícios

4. Implementar uma classe Vetor:


• Com coordenadas x, y e z.
• Que suporte soma, subtração, produto escalar,
produto vetorial
• Que calcule o módulo (valor absoluto) do vetor.
Fim

Você também pode gostar