Construtor e método em Python PDF

Title Construtor e método em Python
Course Programação I
Institution Instituto Federal de Educação, Ciência e Tecnologia de Santa Catarina
Pages 5
File Size 92.6 KB
File Type PDF
Total Downloads 77
Total Views 138

Summary

Resumo de construtor e método em Python...


Description

Construtor Em Python, o métodos __init__() que vai inicializar o objeto é o costrutor. Seu primeiro parâmetro, assim como todo método de instância, é a própria instância “self”. Vejamos um exemplo: class Conta: def __init__(self, numero, titular, saldo, limite): self.numero = numero self.titular = titular self.saldo = saldo self.limite = limite Agora, quando uma classe é criada, todos os seus atributos serão inicializados pelo método __init__(). O método __init__() é responsável por inicializar o objeto, tanto é que já recebe a própria instância (self) criada pelo construtor como argumento. E dessa maneira garantimos que toda instância de uma Conta tenha os atributos que definimos. Questões: Se executarmos a linha de código abaixo, vai acusar um erro: >>> from conta import Conta >>> conta = Conta() Traceback (most recent call last): File "", line 1, in TypeError: __init__() missing 4 required positional arguments: 'numero', 'titular', 'saldo', and 'limite 1) Qual a causa desse erro e com arrumá-lo ? 2) A ordem dos argumentos do __init__ influencia na ordem dos argumentos passador na criação do objeto ? Exemplifique

Métodos Um método é uma sub-rotina ou função que executa uma determinada tarefa. Consideremos as funções saca(), deposita() e extrato(). No paradigma orientado a objetos as funcionalidades (funções) de um objeto são chamados de métodos - do ponto de vista do código, são as funções dentro de uma classe. Considerando a classe Conta, previamente criada. O método deposita() deve receber a instância do objeto (self) além do valor a ser depositado: class Conta: # método __init__() omitido pis já foi apresentado def deposita(self, valor): self.saldo += valor Faremos o mesmo para os métodos saca() e extrato(): class Conta: # outros métodos omitidos def saca(self, valor): if (self.saldo < valor): return False else: self.saldo -= valor return True def extrato(self): print("numero:",self.numero," Saldo:" self.saldo)

Questões: Agora vamos testar nossos métodos: >>> from conta import Conta >>> >>> conta = Conta('123-4', 'João', 120.0, 1000.0) >>> conta.deposita(20.0) >>> conta.extrato() numero: '123-4' saldo: 140.0 >>> a= conta.saca(15) >>> conta.extrato() numero: '123-4' saldo: 125.0 1) Porquê na chamada do método >>> conta.extrato() não é passado nenhum parâmetro, já no método conta.saca(15) é passado um valor ? 2) Qual a finalidade da variável “a” na linha a= conta.saca(15) ?

Objetos são acessados por referência (ponteiros) Vamos analisar o código abaixo: >>> from conta import Conta >>> c1 = Conta('123-4', 'João', 120.0, 1000.0) >>> c2 = c1 >>> c2.saldo 120.0 >>> c1.deposita(100.0) >>> c1.saldo 220.0 >>> c2.deposita(30.0) >>> c2.saldo 250.0 >>> c1.saldo 250.0

Questões: 1) Quantos objetos conta foram criados ? 2) Porque o saldo de c1 ao final ficou 250.0 , de onde saiu esse valor ?

3) Considerando o código abaixo: >>> >>> >>> >>> ... >>> ... >>>

c1 = Conta("123-4", "Python", 500.0, 1000.0) c2 = c1 c3 = Conta("123-4", "Python", 500.0, 1000.0) if(c1 == c2): print(“contas iguais c1 e c2”) if (c1 == c3): print(“contas iguais c1 e c3”)

As contas c1 e c2 são duas contas ou são dois ponteiros que apontam para a mesma conta ? As contas c1 e c3 são duas contas ou são dois ponteiros que apontam para a mesma conta ? As contas c1 e c3 são duas contas diferentes criadas com as mesmas informações, ou são a mesma conta ?

Passagem de ponteiro como parâmetro de método Para uma transferência de dinheiro entre duas contas, precisamos saber o destino e a origem da transferencia : conta1 e conta2 do tipo Conta. Cuidado: já sabemos que os métodos de nossa classe Conta sempre recebem a referência, o self - portanto o método recebe apenas um

parâmetro do tipo Conta, a conta destino (além do valor), o self aponta para a conta origem class Conta: # código omitido def transfere(self, destino, valor): retirou = self.saca(valor) if (retirou == False): return False else: destino.deposita(valor) return True

Questões:

1) Quando passamos uma Conta como argumento, será que o objeto é clonado? 2) Considerando o código abaixo: >>> >>> >>> >>> >>>

c1 = Conta("123-4", "Python", 500.0, 1000.0) c2 = c1 c3 = Conta("123-4", "Python", 500.0, 1000.0) c1.transfere(c2,100.0) c1.transfere(c3,100.0)

Qual o valor final em c1 após executar esse código ?...


Similar Free PDFs