Guia de Programação com
Python
Programação Orientada a Objetos; Classes,
construtores, atributos e métodos
Objetivos
. Crie classes para definir objetos
. Write methods and create attributes for objects
. Instanciar objetos a partir de classes
. Restringir o acesso aos atributos de um objeto
. Trabalhe tanto com classes de novo estilo quanto com classes de estilo antigo
. O Programa de Cuidados com Criaturas
Guia de Programação com Python 2
Palestra 1
Python é orientado a objetos
. Programação orientada a objetos (POO):
Metodologia que define problemas em termos de
objetos que enviam mensagens uns aos outros
–dir(1)
Em um jogo, um objetoMissel poderia enviar um objetoNavio
uma mensagem para Explodir
. OOP não é obrigatório, ao contrário de Java e C#
Guia de Programação com Python 3
Compreendendo os Fundamentos de Orientação a Objetos
. OOP permite a representação de objetos da vida real como
objetos de software (por exemplo, um dicionário como objeto)
. Objeto: Uma única unidade de software que combina
atributos e métodos
. Atributo: Uma "característica" de um objeto; como um
variável associada a um tipo de objeto
. Método: Um "comportamento" de um objeto; como uma função
associado a um tipo de objeto
. Classe:Código que define os atributos e
métodos de uma espécie de objeto (Uma classe é uma coleção
de variáveis e funções trabalhando com elas
variáveis)
4
Conceitos Fundamentais de POO
. Ocultação de informações
. Abstração
. Encapsulamento
. Modularidade
. Polimorfismo
. Herança
Guia de Programação com Python 5
Criando Classes para Objetos
classe Filhote(object):
def __init__(self, nome, cor):
[Link] = name
[Link] = color
def latir(self):
print "Eu sou", cor, nome
puppy1 = Puppy("Max", "brown")
[Link]()
puppy2 = Puppy("Ruby", "black")
[Link]()
. Classe: Código que define os atributos e
métodos de um tipo de objeto
. Instanciar: Criar um objeto; Um único objeto é
chamado anInstance
6
O Programa Simples de Criaturas
classe Critter(object):
Um animal de estimação virtual
def falar(self):
print "Oi. Eu sou uma instância da classe Critter."
# main
crit = Criatura()
[Link]()
. Defina a classe:
–Nome da classe, comece com letra maiúscula, por convenção
–objeto: classe baseada em (tipo incorporado do Python)
. Defina um método
–Como definir uma função
Deve ter um primeiro parâmetro especial, self, que fornece
modo para um método referir-se ao próprio objeto
7
Métodos de classe e parâmetro 'self'
. Os métodos de classe têm apenas uma diferença específica.
de funções ordinárias--elas devem ter um extra
primeiro nome que deve ser adicionado ao início de
a lista de parâmetros
. Você não atribui um valor para este parâmetro (self)
quando você chamar o método, o Python o fornecerá.
. Esta variável em particular refere-se ao próprio objeto,
e por convenção, é dado o nome de self.
Guia de Programação com Python 8
Instanciando um Objeto
crit = Criatura()
. Crie um novo objeto com o nome da classe seguido por set
de parênteses
–Critter() cria um novo objeto da classeBichinho
. É possível atribuir um objeto recém-instanciado a uma variável
de qualquer nome
–crit = Critter() atribui um novo objeto Critter acrit
. Evite usar uma variável com o mesmo nome da classe
nome em letras minúsculas
Guia de Programação com Python 9
Criando Múltiplos Objetos
crit1 = Critter()
crit2 = Critter()
. Criar múltiplos objetos é fácil
. Dois objetos criados aqui
. Cada objeto é um ser autônomo e completo.
Guia de Programação com Python 10
Invocando um Método
[Link]()
. QualquerBichinhoo objeto tem métodofalar()
. [Link]()invocafalar()método deBicho
objetocrítica
. Imprime cadeiaOi. Eu sou uma instância da classe
Critter.
simple_critter.py
Guia de Programação com Python 11
Usando Construtores
. Construtor: Um método especial que é
invocado automaticamente logo após um novo objeto ser
criado
. Geralmente escrevo um em cada aula
. Geralmente configura os valores iniciais dos atributos de
novo objeto no construtor
Guia de Programação com Python 12
Criando um Construtor
def __init__(self):
Um novo animalzinho nasceu!
. NovoBichoo objeto se anuncia automaticamente
ao mundo
. __init__
–É um nome de método especial
–Chamado automaticamente por new Bichinhoobjeto
Guia de Programação com Python 13
Inicializando Atributos
classe Critter (objeto):
def __init__(self, nome):
[Link] = name
...
crit1 = Critter("Poochie”)
. Os atributos do objeto podem ser criados e inicializados automaticamente
através do construtor (grande conveniência!)
. o parâmetro self é o primeiro em cada método de instância
–eu recebe referência a novoBichinhoobjeto
mesmo
–nome recebePoochie
[Link] = nomecria o atributonomepara objeto
e define paraPoochie
-crit1recebe novasCriaturaobjeto
14
Acessando Atributos
classe Critter(object):
...
def falar(self):
print "Oi. Eu sou", [Link], "\n"
...
[Link]()
imprimir [Link]
. Avaliação de atributos usando métodos: falar()
–Usa um Criaturado objetonomeatributo
–Recebe referência ao objeto em si em eu mesmo
. Acessando Atributos Diretamente
Guia de Programação com Python 15
Imprimindo um Objeto (Como?)
classe Critter(object):
...
def __str__(self):
rep = "Critter object\n"
rep += "nome: " + [Link] + "\n"
retornar rep
...
imprimir crit1
. __str__ isum método especial que retorna string
representação de objeto
Guia de Programação com Python (código de exemplo) 16
Mais Duas Métodos Especiais
classe Cachorrinho(object):
def __init__(self):
[Link] = []
[Link] = []
def __setitem__(self, nome, cor):
[Link](nome)
[Link](cor)
def __getitem__(self, nome):
se nome em [Link]:
retornar [Link][[Link](nome)]
senão:
retornar Nenhum
cachorro = Filhote()
dog['Max'] = 'brown'
dog['Ruby'] = 'yellow’
imprimir "Max é", cachorro['Max']
17
Usando Atributos de Classe e Estáticos
Métodos
. Atributo de classe: Um único atributo que é
associado a uma classe em si (não uma instância!)
. Método estático: Um método que está associado a um
classe em si
. O atributo de classe pode ser usado para contar o total
número de objetos instanciados, por exemplo
. Métodos estáticos muitas vezes trabalham com atributos da classe
Guia de Programação com Python 18
Criando um Atributo de Classe
classe Critter(object):
total = 0
. total =0cria atributo de classetotaldefinido para0
. Declaração de atribuição na classe, mas fora do método
cria atributo de classe
. A instrução de atribuição executada apenas uma vez,
quando o Python vê pela primeira vez a definição de classe
. O atributo de classe existe mesmo antes de um único objeto
criado
. Pode usar atributo de classe sem nenhum objeto da classe
em existência
Guia de Programação com Python 19
Acessando um Atributo de Classe
class Critter(object):
total = 0
def status():
print "Total critters", [Link]
status = staticmethod(status)
def __init__(self, nome):
[Link] += 1
imprimir [Link] a aula
imprimir [Link] #a instância
#[Link] += 1 # won’t work;can't assign new value to
um atributo de classe através da instância
20
Criando um Método Estático
classe Critter(object):
...
def status():
print "Total de criaturas", [Link]
status = staticmethod(status)
. status()
É um método estático
–Não tem eu mesmona lista de parâmetros porque método
será invocado através da classe e não do objeto
. staticmethod()
–Função embutida do Python
–Recebe método e retorna método estático
21
Invocando um Método Estático
...
crit1 = Critter("critter 1")
crit2 = Critter("critter 2")
crit3 = Critter("critter 3")
[Link]()
. [Link]()
–Invoca método estático status()definido emBichinho
Imprime uma mensagem afirmando que existem 3 criaturas
–Funciona porque o construtor incrementa a classe
atributototal, questatus()displays
classy_critter.py
Guia de Programação com Python 22
Definindo valores padrão
classe Pessoa(object):
def __init__(self, nome="Tom", idade=20):
[Link] = name
[Link] = age
def conversar(self):
print "Oi, eu sou", [Link]
def __str__(self):
return "Oi, eu sou " + [Link]
one = Person(name="Yuzhen", age = "forever 20")
imprima um
dois = Pessoa()
imprimir dois
Guia de Programação com Python 23
Summary
. A Programação Orientada a Objetos (POO) é uma
metodologia de programação onde novos tipos de
objetos são definidos
. Um objeto é uma única unidade de software que combina
atributos e métodos
. Um atributo é uma "característica" de um objeto; é um
variável associada a um objeto(variável de instância
. Um método é um "comportamento" de um objeto; é um
função associada a um objeto
. Uma classe define os atributos e métodos de um
tipo de objeto
Guia para Programação com Python 24
Resumo (continuação)
. Cada método de instância deve ter um primeiro especial
parâmetro, chamadoeu mesmopor convenção, qual
fornece uma maneira para um método referir-se ao próprio objeto
. Um construtor é um método especial que é
invocado automaticamente logo após um novo objeto ser
criado
. Um atributo de classe é um único atributo que é
associado a uma classe em si
. Um método estático é um método que está associado a
uma aula em si
Guia de Programação com Python 25