E Book Python Funcoes e Poo
E Book Python Funcoes e Poo
CÓDIGO:
1012023219
TIPO DE MATERIAL:
E-book
TÍTULO:
Python - Funções e POO
PROFESSOR:
Rogério Araújo
ÚLTIMA ATUALIZAÇÃO:
1/2023
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Sumário
APRESENTAÇÃO...............................................................................................................5
1. FUNÇÕES EM PYTHON.................................................................................................6
1.1.1 Conceituação........................................................................................................6
1.1.2. Vantagens............................................................................................................6
1.6.1. Introdução............................................................................................................36
1.7.1. Introdução............................................................................................................41
www.grancursosonline.com.br 3
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
REFERÊNCIAS...................................................................................................................83
www.grancursosonline.com.br 4
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
APRESENTAÇÃO
www.grancursosonline.com.br 5
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
1. FUNÇÕES EM PYTHON
1.1.1 Conceituação
Os módulos:
1.1.2. Vantagens
Ao modularizarmos nosso código, podemos obter uma série de vantagens, tais como:
www.grancursosonline.com.br 6
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• Procedimentos:
– São módulo que não retornam valores;
– Exemplos:
– Imprimir o maior elemento de um grupo de elementos; ou
– Ler um elemento.
• Funções:
– São módulos que retornam um valor;
– Exemplos:
– Retornar o menor (ou maior) valor de um grupo de elementos; ou
– Retornar um valor booleano caso um valor esteja dentro de um grupo de elementos.
ATENÇÃO
Em algumas linguagens de programação, como Pascal, há tanto procedimentos, que
não retornam valores, quanto funções, que retornam valores. Já em outras lingua-
gens, como linguagens C, C++, Java e Python, há somente funções, independente-
mente se retornam ou não valores.
DIRETO DO CONCURSO
www.grancursosonline.com.br 7
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Letra a.
Os procedimentos não retornam valores, e as funções retornam um valor. Portanto, letra A
é o nosso gabarito.
Lembre-se: Nas linguagens C, C++, Java e Python, há somente funções, independente-
mente se retornam ou não valores.
Comentando todas as letras:
a) Certa.
b) Errada. É o inverso.
c) Errada. As funções retornam um valor.
d) Errada. Não há essa relação entre o valor recebido e o valor retornado pelas funções.
e) Errada. Não há essa relação entre o valor recebido e o valor retornado pelas funções, e
os procedimentos não retornam valores.
ATENÇÃO
Uma boa prática de programação é evitar declarar variáveis globais com o mesmo
nome das variáveis dos módulos.
Na figura 1.3, a variável global A é declarada no corpo do programa principal. Ela pode
ser vista e manipulada tanto no Módulo 1 quanto no Módulo 2. Dentro do Módulo 1, temos
a variável local B, que é vista e manipulada apenas dentro desse módulo. A variável local C,
por sua vez, é declarada, vista e manipulada dentro do Módulo 2.
www.grancursosonline.com.br 8
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Errado.
As variáveis globais e locais podem ter os mesmos nomes, porém uma boa prática de pro-
gramação é evitar declarar variáveis globais com o mesmo nome das variáveis das funções.
www.grancursosonline.com.br 9
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Errado.
É o inverso.
Na passagem de parâmetros por valor, o valor do parâmetro real é copiado para o parâme-
tro formal do módulo, preservando, assim, o valor original do parâmetro.
Na passagem de parâmetros por referência, toda alteração feita nos parâmetros formais
reflete-se nos parâmetros reais.
Sintaxe:
www.grancursosonline.com.br 10
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
O segundo exemplo é de uma função com um parâmetro formal e que não retorna nada:
Para a função dobrar(), foi citado um parâmetro formal: x. Quando se chama essa função,
por exemplo dobrar(15), passamos um parâmetro real (15) e a função não retorna nada,
apenas imprime um valor, que é a multiplicação do parâmetro formal x por 2 (30).
O terceiro exemplo traz uma função com um parâmetro formal e que retorna algum valor:
www.grancursosonline.com.br 11
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Alteramos a função dobrar(), fazendo com que ela retornasse o valor do resultado da multi-
plicação, ao invés de apenas imprimir esse resultado. Para isso, foi utilizada a declaração return.
Na nova versão da função dobrar(), continuamos com o parâmetro formal x, porém ela é
atualizada com a multiplicação do valor atual de parâmetro x pelo valor 2, e seu valor atuali-
zado é retornado pela função.
Como a função agora retorna um valor, a função pode:
Aproveitando o estudo sobre funções em Python, vamos estudar sobre o código que traz
a implementação da série de Fibonacci como função.
Iniciaremos com a função que gera a série, começando com o valor 0.
Exemplo:
www.grancursosonline.com.br 12
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Agora temos o código da série Fibonacci em forma de função. Dessa maneira, basta
chamá-la, passando um parâmetro real. Serão impressos os primeiros números da série
menores que o valor do parâmetro real. No caso, chamamos a função fibonacci(), informando
o valor 10, ou seja, serão impressos os primeiros números da série menores que 10, com a
série iniciando com o valor 0.
Modificaremos a função, fazendo com que a série se inicie com o valor 1. Para isso,
vamos mudar o seguinte:
Exemplo:
Agora, chamamos a função fibonacci(), informando o valor 10. Serão impressos os pri-
meiros números da série menores que 10, com a série iniciando com o valor 1.
Uma função não pode ter um bloco vazio de instruções:
Caso haja necessidade de ter uma função com um bloco vazio, pode-se utilizar a pala-
vra-chave pass. Dessa forma, o erro não aparecerá:
www.grancursosonline.com.br 13
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Certo.
Para a criação de uma função, usamos a palavra-chave def, seguida do nome da função.
...I... contar(n):
a = 1
while a < n:
print a,
a = a+1
contar(10)
Letra b.
Para a criação de uma função, usamos a palavra-chave def, seguida do nome da função:
def contar(n):
Organizando o código da questão e verificando o resultado de sua execução, temos
www.grancursosonline.com.br 14
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
O código acima tem o objetivo de imprimir uma sequência de números inteiros, começando
de 1 até o menor valor antes do valor passado como parâmetro. No caso, foram impressos
números de 1 até 9.
...I...
for x in pro:
print(x)
processos = [“0456789908”, “0875643087”, “0897645109”]
exibir_processos(processos)
Letra e.
Para a criação de uma função, usamos a palavra-chave def, seguida do nome da função:
O código acima tem o objetivo de imprimir cada elemento de uma lista. No caso, a lista
passada como parâmetro foi a lista da variável processos.
www.grancursosonline.com.br 15
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
As variáveis globais são variáveis criadas fora das funções. Já as variáveis locais
possuem escopo das funções.
Exemplo:
A variável x, no exemplo anterior, é uma variável global, pois foi declarada (recebeu um
valor) fora da função dobrar().
Caso haja uma variável declarada dentro da função com o mesmo nome de uma vari-
ável global, haverá duas variáveis diferentes para o código. A variável global permanecerá
com o mesmo valor após a execução da função com uma variável local com o mesmo nome
da global.
Exemplo:
www.grancursosonline.com.br 16
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Veja que a variável x, na linha 7 do exemplo anterior, foi inicializada com o valor 15.
Nas linhas:
www.grancursosonline.com.br 17
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
No exemplo acima, a variável global x foi declarada dentro da função dobrar(). Ao chamar
a função, é impresso o valor da variável: 30. Também, ao chamar a função print(), a impres-
são do valor da variável é 30.
Uma variável global criada fora de uma função pode ter seu valor modificado dentro da
função também utilizando a palavra-chave global.
Exemplo:
www.grancursosonline.com.br 18
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Errado.
Sim, é possível, utilizando a palavra-chave global.
def func():
x = 1
print(x)
x = 10
func()
print(x)
Letra c.
Organizando o código da questão e verificando o resultado de sua execução, temos:
Quando chamamos a função func(), há uma variável local x que recebe o valor 1 e é im-
presso o valor dessa variável local.
www.grancursosonline.com.br 19
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
def foo(a):
return a + a + a
b = 1
foo(b)
Após a execução de todos esses códigos, qual é o valor a ser mostrado mediante o
comando abaixo?
print(b)
a. 0
b. 1
c. 3
d. 6
e. 9
Letra b.
Organizando o código da questão e verificando o resultado de sua execução, temos:
www.grancursosonline.com.br 20
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Quando chamamos a função foo(), passando um valor para o parâmetro formal, a função
retorna o valor triplicado do parâmetro.
Na linha 4, a variável b foi inicializada com o valor 1.
Nas linhas de 5 a 7, a função foo() é chamada, passando como parâmetro real a variável
b. Com isso, para cada chamada à função foo(), será retornado o valor 3.
Na linha 8, há a impressão do valor da variável b, que continua sendo valor 1. Não houve
mudança do valor da variável.
Como o código gerou o valor 1, então nosso gabarito é a letra B.
Melhorando o código para explicar melhor, temos:
def dobra(y):
x = y + y
return x
x = 5
dobra(x)
print x
www.grancursosonline.com.br 21
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Letra c.
Organizando o código da questão e verificando o resultado de sua execução, temos:
Quando chamamos a função dobra(), passando um valor para o parâmetro formal, a fun-
ção retorna o valor dobrado do parâmetro.
O código desta questão é idêntico ao código da questão anterior, mas com uma diferença:
existe uma variável local x que receberá o valor duplicado do parâmetro formal y.
Na linha 5, a variável x foi inicializada com o valor 5.
Nas linhas 6 e 7, a função dobra() é chamada, passando como parâmetro real a variável x.
Com isso, para cada chamada à função dobra(), será retornado o valor 10.
Na linha 8, há a impressão do valor da variável x, que continua sendo valor 5. Não hou-
ve mudança do valor da variável, por mais que haja uma variável local na função com o
mesmo nome.
Como o código gerou o valor 5, então nosso gabarito é a letra C.
Melhorando o código para explicar melhor, temos:
Na linha 6, como forma de mostrar o valor da variável x, foi impresso o seu valor, ou seja, 5.
Nas linhas 7 e 8, usamos a função print() para imprimir o valor retornado por cada chamada
à função dobra(), ou seja, foi impresso o valor 10 para cada linha.
Na linha 9, é impresso o valor da variável x (valor 5), o que mostra que o valor da variável
x não é alterado, mesmo que haja um parâmetro formal ou variável local da função com o
mesmo nome do parâmetro real, que, no caso do código, é a variável x.
Em resumo, a letra C é nosso gabarito, pois o código da questão imprime o valor 5.
www.grancursosonline.com.br 22
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
def e(b):
a = b*b
return a
a = 10
e(a)
print(e(a))
Letra c.
Organizando o código da questão e verificando o resultado de sua execução, temos:
Mais uma questão parecida com as questões anteriores: há uma variável local a que rece-
berá o valor elevado a dois do parâmetro formal b.
Na linha 5, a variável a foi inicializada com o valor 10.
Nas linhas 6 e 7, a função e() é chamada, passando como parâmetro real a variável a. Com
isso, para cada chamada à função e(), será retornado o valor 100.
Na linha 8, há a impressão do valor retornado pela função e(), passando o valor da variável
a. Com isso, será impresso o valor 100.
Não houve mudança do valor da variável a, por mais que haja uma variável local na função
com o mesmo nome.
Como o código gerou o valor 100, então nosso gabarito é a letra C.
www.grancursosonline.com.br 23
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Dentro da função fatorial na versão iterativa, as variáveis aux e fat recebem, respectiva-
mente, os valores 1 e 1 inicialmente.
Enquanto o valor da variável aux for menor que ou igual a n então:
• Atualize:
– O valor da variável fat com o valor original dela mesma multiplicado pelo valor da
variável aux;
– O valor da variável aux com valor original dela mesma somado com 1.
www.grancursosonline.com.br 24
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
www.grancursosonline.com.br 25
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
www.grancursosonline.com.br 26
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
No código acima, a variável x recebe o valor 1 e há uma declaração while com a condi-
ção: enquanto o valor de x for menor ou igual a 10, então:
Enquanto a função recursiva fatorial() se chama uma vez, a função recursiva fibonacci()
se chama duas vezes:
• fibonacci(n – 2);
• fibonacci(n – 1).
Quando uma função chama a si mesma uma vez apenas, temos uma pilha de chamadas,
como está na figura 1.6.
Já quando uma função chama a si mesma mais de uma vez, então se forma uma árvore
de chamadas. Como a função fibonacci() chama a si mesma duas vezes, a árvore de chama-
das é binária (quando cada nó possui até dois nós-filho). A cada chamada da função recur-
siva fibonacci() mais duas chamadas são geradas, e assim por diante.
Para entendermos o código da função recursiva, podemos aplicar a função passando
como parâmetro valores de 1 a 3.
Quando chamamos fibonacci(1), o seu retorno é 0:
www.grancursosonline.com.br 27
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• A função retorna 1.
• fibonacci(1) = 0;
• fibonacci(2) = 1;
• fibonacci(3) = 1.
• fibonacci(1) = 1 - 1 = 0;
• fibonacci(2) = 2 - 1 = 1;
• fibonacci(3) = fibonacci(1) + fibonacci(2) = 0 + 1 = 1;
• fibonacci(4) = fibonacci(2) + fibonacci(3) = 1 + 1 = 2;
• fibonacci(5) = fibonacci(3) + fibonacci(4) = 1 + 2 = 3;
• fibonacci(6) = fibonacci(4) + fibonacci(5) = 2 + 3 = 5;
• fibonacci(7) = fibonacci(5) + fibonacci(6) = 3 + 5 = 8;
• fibonacci(8) = fibonacci(6) + fibonacci(7) = 5 + 8 = 13;
• fibonacci(9) = fibonacci(7) + fibonacci(8) = 8 + 13 = 21;
• fibonacci(10) = fibonacci(8) + fibonacci(9) = 13 + 21 = 34.
Agora vamos estudar como criar uma função recursiva que gera a série começando com
o valor 1. Como estudado na seção 1.2, temos a seguinte versão da função iterativa:
www.grancursosonline.com.br 28
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
No código acima, a variável x recebe o valor 1 e há uma declaração while com a condi-
ção: enquanto o valor de x for menor ou igual a 10, então:
• fibonacci(1) = 1;
• fibonacci(2) = 1;
• fibonacci(3) = fibonacci(1) + fibonacci(2) = 1 + 1 = 2;
• fibonacci(4) = fibonacci(2) + fibonacci(3) = 1 + 2 = 3;
• fibonacci(5) = fibonacci(3) + fibonacci(4) = 2 + 3 = 5;
• fibonacci(6) = fibonacci(4) + fibonacci(5) = 3 + 5 = 8;
• fibonacci(7) = fibonacci(5) + fibonacci(6) = 5 + 8 = 13;
• fibonacci(8) = fibonacci(6) + fibonacci(7) = 8 + 13 = 21;
• fibonacci(9) = fibonacci(7) + fibonacci(8) = 13 + 21 = 34;
• fibonacci(10) = fibonacci(8) + fibonacci(9) = 21 + 34 = 55.
www.grancursosonline.com.br 29
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
1. def Fatorial( n ):
2. if (n == 1) or (n == 0):
3. return 1
4. else:
5. return n * (n - 1)*(n – 2)*(n – 3)*(n – 4)*(n - 5);
Em qual linha está o erro e como consertá-lo para que a função cumpra corretamente
o seu propósito?
a. o código deveria ser “if (n == 1):” na linha 2.
b. o código deveria ser “return 0” na linha 3.
c. o código deveria ser “if (n == 1) and (n == 0):” na linha 2.
d. o código deveria ser “return Fatorial(n - 1) * n;” na linha 5.
e. o código deveria ser “return Fatorial(n) * n -1;” na linha 5.
Letra d.
O erro de programação citado no enunciado é o seguinte: a função Fatorial() retornará um
valor fatorial de forma incorreta. Por exemplo, se o parâmetro n for algum valor entre 2 e 5,
então a função vai retornar 0:
www.grancursosonline.com.br 30
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
return Fatorial(n - 1) * n;
Dessa forma, podemos passar qualquer valor como parâmetro para a função Fatorial(),
que teremos o valor fatorial do parâmetro:
if n > 1:
return n * foo(n-1)
return n
print(foo(4))
Letra c.
Organizando o código da questão e verificando o resultado de sua execução, temos:
www.grancursosonline.com.br 31
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
if n < 3:
return n-1
else:
return f(n-2) + f(n-1)
print f(10)
Letra d.
Organizando o código da questão e verificando o resultado de sua execução, temos:
www.grancursosonline.com.br 32
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• f(1) = 1 - 1 = 0;
• f(2) = 2 + 1 = 1;
• f(3) = f(1) + f(2) = 0 + 1 = 1;
• f(4) = f(2) + f(3) = 1 + 1 = 2;
• f(5) = f(3) + f(4) = 1 + 2 = 3;
• f(6) = f(4) + f(5) = 2 + 3 = 5;
• f(7) = f(5) + f(6) = 3 + 5 = 8;
• f(8) = f(6) + f(7) = 5 + 8 = 13;
• f(9) = f(7) + f(8) = 8 + 13 = 21; e
• f(10) = f(8) + f(9) = 13 + 21 = 34.
Portanto, f(10) vai retornar 34, o que faz a letra D ser nosso gabarito.
def f(i):
if i == 1 or i == 2:
return 1
return f(i-1) + f(i-2)
print(f(10))
Letra c.
Organizando o código da questão e verificando o resultado de sua execução, temos:
www.grancursosonline.com.br 33
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• f(1) = 1;
• f(2) = 1;
• f(3) = f(2) + f(1) = 1 + 1 = 2;
• f(4) = f(3) + f(2) = 2 + 1 = 3;
• f(5) = f(4) + f(3) = 3 + 2 = 5;
• f(6) = f(5) + f(4) = 5 + 3 = 8;
• f(7) = f(6) + f(5) = 8 + 5 = 13;
• f(8) = f(7) + f(6) = 13 + 8 = 21;
• f(9) = f(8) + f(7) = 21 + 13 = 34; e
• f(10) = f(9) + f(8) = 34 + 21 = 55.
Para a criação de uma função lambda, usamos a palavra-chave lambda seguida de:
• Um ou mais parâmetros;
• Uma expressão.
www.grancursosonline.com.br 34
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplos:
No código acima, temos a primeira função lambda, que é referenciada pela variável x.
Essa função possui um parâmetro formal a e tem como expressão a + 10.
Para usar a função lambda mencionada, utilizamos a variável x como se fosse uma
função normal, citando um parâmetro formal. O nome da variável é semelhante ao nome de
uma função normal.
No exemplo, a função lambda referenciada pela variável x foi acionada usando o nome
dessa variável e passando o valor 5 como parâmetro real: x(5). O resultado disso é o retorno
do valor 15 (valor do parâmetro real 5 somado com 10).
A segunda função lambda é referenciada pela variável y. Essa função possui três parâ-
metros formais: a, b e c. A expressão dessa função é: a + b * c.
Usamos a variável y como se fosse uma função comum, passando três parâmetros reais.
No exemplo, foram passados os valores 5, 3 e 10: y(5, 3, 10). O resultado retornado é 35: 5
+ 3 * 10, como definido na expressão da função lambda.
DIRETO DO CONCURSO
Errado.
O texto da questão está citando, na verdade, a criação de uma função com a palavra-chave
def, em que atribuímos um nome à função:
www.grancursosonline.com.br 35
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Já uma função lambda é anônima. Ela é criada com a palavra-chave lambda e pode ser
referenciada por uma variável:
Corrigindo a questão:
Na linguagem Phyton, uma função normal atribui à nova função o nome que está no cabe-
çalho (def nome_funcao()), em vez de retorná-la como resultado, como acontecem com as
funções lambda.
1.6.1. Introdução
O erro retornado foi: o parâmetro a recebeu a lista como valor, mas os outros parâmetros
não receberam nada e estão esperando algum valor na chamada da função.
www.grancursosonline.com.br 36
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Como poderíamos passar para a lista em que cada elemento poderia inicializar cada
parâmetro formal da função?
Em Python, pode-se criar funções que recebam números arbitrários de parâmetros.
Podemos descompactar parâmetros, quando se chama a função (unpacking), ou compactar
parâmetros, quando se cria a função (packing).
www.grancursosonline.com.br 37
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplos:
Perceba que tanto a lista quanto o dicionário, no exemplo acima, possuem dois elemen-
tos para cada coleção. A função possui quatro parâmetros formais.
Ao chamar a função, passamos os elementos da lista (*lista) e os elementos do dicio-
nário (**dicionario).
ATENÇÃO
A quantidade de parâmetros formais e de elementos da coleção ou da junção das
coleções devem ser iguais na descompactação de parâmetros.
www.grancursosonline.com.br 38
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Nos exemplos 1 e 2, as coleções (lista e dicionário) contêm quatro elementos cada uma
delas, e a função espera três parâmetros.
Exemplo:
www.grancursosonline.com.br 39
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
O PULO DO GATO
Em resumo: A descompactação dos parâmetros acontece na chamada da função, nos pa-
râmetros reais. Já a compactação acontece na criação da função, nos parâmetros formais.
DIRETO DO CONCURSO
Letra c.
Estudamos que a descompactação dos parâmetros acontece na chamada da função, nos
parâmetros reais. Já a compactação acontece na criação da função, nos parâmetros for-
mais. Por conta disso, marcaríamos a letra B. Porém, a banca citou a letra C. Mas por que
a banca trouxe unpacking como processo executado dentro da função, e não na chamada?
Meu(minha) prezado(a), a questão foi baseada no livro Python: Escreva seus primeiros
programas, do autor Felipe Cruz. No livro, Cruz cita que a compactação (packing) de parâ-
metros acontece na chamada da função, e a descompactação (unpacking) é “... o processo
que acontece dentro da função, e não na chamada”.
www.grancursosonline.com.br 40
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Isso é totalmente diferente do que estudamos. Aqui mesmo nesta aula, trago várias fontes
que explicam e demonstram que a descompactação dos parâmetros acontece na chamada
da função e a compactação acontece na criação da função. Infelizmente, é aquele tipo de
questão que traz mais uma divergência de autores dentro da área de TI. =(
Comentando as outras letras:
• A letra A cita parâmetros, que são informações citadas na chamada de uma função
(parâmetros reais) ou na criação de função (parâmetros formais);
• A letra D traz o import, que é usado para importar pacotes de códigos usados em
seu código;
• A letra E cita traceback, um relatório que contém as chamadas de função feitas em
seu código em um ponto específico.
1.7.1. Introdução
As funções que são tratadas como objetos de primeira classe são chamadas de funções
de primeira classe.
Propriedades das funções de primeira classe:
As funções em Python são tratadas como objetos de primeira classe porque aquelas
possuem as propriedades citadas acima.
www.grancursosonline.com.br 41
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Errado.
As funções em Python são tratadas como objetos de primeira classe, podendo ser guarda-
das em variáveis, passadas como parâmetro para outras funções.
www.grancursosonline.com.br 42
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Como uma função é um objeto, ela pode ser referenciada ou armazenada em uma variá-
vel. Dessa maneira, podemos trabalhar a variável como se estivesse chamando a função de
forma direta e passando parâmetros, se houver.
Exemplo:
No exemplo, a variável x está referenciando a função dobra(). Com isso, podemos usar a
variável x como se fosse a própria função, passando um parâmetro.
Como uma função é um objeto, ela pode ser passada como parâmetro para outras funções.
As funções que aceitam outras como parâmetros são chamadas de funções de
ordem superior.
Exemplo:
www.grancursosonline.com.br 43
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• tudoMinusculo():
– Possui o parâmetro chamado texto;
– Retorna o texto do parâmetro todo minúsculo.
• tudoMaisculo():
– Possui o parâmetro chamado texto;
– Retorna o texto do parâmetro todo minúsculo.
• formataTexto():
– Possui o parâmetro chamado funcao;
– Possui a variável local texto, que recebe o retorno da função passada como parâmetro;
– Retorna o texto da variável local tudo em minúsculo ou maiúsculo, dependendo da
função passada.
Como uma função é um objeto, ela pode ser retomada por outras funções.
Exemplo:
www.grancursosonline.com.br 44
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Como uma função é um objeto, ela pode ser armazenada em coleções, tais como listas,
tuplas, sets e dicionários.
Exemplo:
lista[1](x)
Como essa chamada está na função print(), será impressa a string “ROGERÃO ARAÚJO”.
Nas linhas 15 e 16, temos uma declaração for para percorrer os elementos na lista, pas-
sando para cada elemento a variável x como parâmetro.
Usei como exemplo o armazenamento das funções em uma lista, mas poderíamos usar
tuplas, sets e dicionários.
www.grancursosonline.com.br 45
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• Abstração:
– Elucida apenas as propriedades comuns de um conjunto de objetos, omitindo
os detalhes.
• Classes:
– São um conjunto de objetos que possuem o mesmo tipo.
• Objetos:
– São instâncias das classes.
• Encapsulamento:
– Distingue a especificação e a implementação das operações de um objeto.
• Herança:
– Permite ao usuário definir tipos de forma incremental, a partir de tipos existentes.
• Polimorfismo:
– Define que uma determinada operação pode se comportar de diferentes formas em
diferentes classes.
www.grancursosonline.com.br 46
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• Abstração;
• Encapsulamento;
• Herança;
• Polimorfismo.
• Modularidade:
– O código fonte para um objeto pode ser escrito e mantido independentemente do
código fonte para outros objetos;
– Uma vez criado, um objeto pode ser facilmente introduzido no sistema.
• Encapsulamento de informações:
– Ao interagir somente com métodos de um objeto, os detalhes de sua implementação
interna permanecem escondidos do mundo exterior.
• Reutilização de código:
– Se um objeto já existe, pode-se usar esse objeto em outro programa.
www.grancursosonline.com.br 47
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Certo.
Os conceitos da POO são independentes de qualquer linguagem de programação, mas,
para que uma linguagem possa ser chamada de orientada a objetos, é necessário que ela
implemente os conceitos da POO.
Letra c.
São quatro os pilares da POO: Abstração, Encapsulamento, Herança e Polimorfismo. Lem-
bre-se de que a Abstração se desdobra em Classes e Objetos.
Portanto, a letra C é o gabarito da questão.
www.grancursosonline.com.br 48
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Errado.
Pelo contrário. Uma das vantagens da programação orientada a objetos está no fato de
que seus conceitos podem facilitar a manutenção dos programas, podendo lidar com pro-
blemas complexos.
Certo.
A POO, ao ser usada como forma de desenvolvimento de sistemas, traz os seguintes be-
nefícios: modularidade, encapsulamento de informações, reutilização de código e facilida-
de de depuração e inserção.
Certo.
Python é uma linguagem imperativa, orientada a objetos e funcional, o que torna a questão
totalmente correta.
Errado.
Python:
www.grancursosonline.com.br 49
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Letra b.
Sabemos que Python suporta os conceitos da orientação a objetos. Além dela, temos as
linguagens: Java, C++, C# e Ruby.
Das letras acima, apenas a linguagem C não suporta a orientação a objetos.
Errado.
Python tem, sim, suporte aos conceitos da orientação a objetos.
Certo.
A linguagem Python suporta os conceitos da orientação a objetos. Além dela, temos as
linguagens: Java, C++, C# e Ruby.
Certo.
Como estudado na aula I, as instruções contêm expressões. Nas instruções formadas por
expressões, podemos ter a criação de variáveis e a utilização delas.
www.grancursosonline.com.br 50
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Errado.
Python suporta, sim, os conceitos da orientação a objetos.
• Construtor;
• Atributos e métodos de:
– Instâncias; ou
– Classe.
Sintaxe:
class NomeClasse:
def __init__(self, parâmetro 1, parâmetro 2, parâmetro N):
self.atributo 1 = parâmetro 1
self.atributo 2 = parâmetro 2
self.atributo N = parametron N
def nomeMetodo(self, [parâmetro 1, parâmetro 2,...]):
{bloco de instruções}
[return] {valor}
Ao longo da seção 2.2, estudaremos cada item da sintaxe acima, porém iniciaremos com
uma sintaxe mais simples para a criação de uma classe:
class NomeClasse:
{bloco de instruções}
variável = NomeClasse()
www.grancursosonline.com.br 51
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
A sintaxe anterior mostra como um objeto é criado e inicializado e como uma variável
recebe essa nova instância como retorno.
Essa sintaxe representa um construtor de instâncias de classe. Ele serve para iniciali-
zar o estado de uma instância, podendo, para isso, receber alguns valores como parâmetros.
Cada objeto foi criado por ter valores diferentes para esses atributos de instância.
No exemplo, foi criado um objeto da classe Professor, que é referenciado pela variá-
vel rogerio:
rogerio = Professor()
www.grancursosonline.com.br 52
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Os atributos definidos em uma classe em Python são públicos, o que faz com que
qualquer objeto possa ter acesso direto aos atributos de outro objeto.
Exemplo:
Caso haja necessidade de ter uma classe com um bloco vazio, pode-se utilizar a pala-
vra-chave pass. Dessa forma, o erro não aparecerá:
www.grancursosonline.com.br 53
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Em Python, usa-se a palavra-chave None para representar objetos nulos. None não é
igual a 0, False ou uma string vazia. É um tipo de dado próprio (NoneType).
Exemplo:
No exemplo acima, o valor da variável objeto é nulo (None), por isso as instruções da
declaração if, da linha 3, e da declaração else, da linha 13, serão executadas.
Finalmente, objetos são abstrações de Python para dados. Todos os dados em um pro-
grama Python são representados por objetos ou por relações entre objetos.
• Os tipos de dados:
– int, float, complex, str e bool.
• As coleções:
– Listas, tuplas, sets e dicionários.
Os tipos de dados em Python são considerados classes, e os valores desses tipos são
considerados objetos. Veja: o tipo de dados (int, por exemplo) é como se fosse uma classe,
e um valor desse tipo (15, por exemplo) é como se fosse um objeto. Além disso, temos uma
variável que apontou para um objeto de tipo de dados, por exemplo, x = 15.
A mesma ideia pode ser replicada para as coleções em Python. Elas também são con-
sideradas classes, e é considerado objeto um conjunto de dados estruturados por algum
tipo dessas coleções. As coleções oferecem uma série de métodos que podem trabalhar os
dados de uma coleção, assim como uma classe oferece para um objeto criado a partir dela.
Além disso, um objeto de uma coleção é referenciado por uma variável.
www.grancursosonline.com.br 54
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
A variável linguagens apontou para um objeto do tipo list. A partir desse objeto, podemos
usar os métodos definidos para trabalhar com os dados, por exemplo, o método append().
O PULO DO GATO
Em Phyton, tudo é um objeto (tipos, valores, funções, métodos e instâncias) e todos pos-
suem atributos e métodos associados.
DIRETO DO CONCURSO
Certo.
Os objetos são instâncias das classes. Quando um objeto é criado, ele usa a estrutura de-
finida da sua classe, ou seja, o estado e o comportamento definidos pela classe.
Certo.
Sim, é possível acessar os atributos de uma instância de classe (objeto) sem a neces-
sidade de utilizar um método, porque os atributos definidos em uma classe em Python
são públicos.
www.grancursosonline.com.br 55
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Errado.
Python suporta, sim, os conceitos da orientação a objetos, porém os atributos definidos em
uma classe em Python são públicos.
Errado.
Os atributos definidos em uma classe em Python são públicos, o que faz com que qualquer
objeto possa ter acesso direto aos atributos de outro objeto, não precisando de métodos
gets e sets.
Errado.
Em Python, usa-se a palavra-chave None para representar objetos nulos.
Errado.
Em Python, tudo é um objeto, e todos possuem atributos e métodos associados.
www.grancursosonline.com.br 56
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
1) A criação de um objeto;
2) A inicialização desse objeto.
Caso o método __new__() não retorne uma instância, o método __init__() não será chamado.
ATENÇÃO
Os nomes dos métodos __new__() e __init__() são nomes padrões em Python, e o
método __new__() é sempre chamado antes do método __init__(), quando se instan-
cia uma classe.
www.grancursosonline.com.br 57
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Por ser um método estático, ou seja, um método de classe, e não das instâncias
da classe, o método __new__() não precisa do parâmetro self, que estudaremos
mais adiante.
O parâmetro cls representa o tipo da própria classe da qual estamos criando um objeto.
Já o parâmetro *args representa os parâmetros citados no momento da criação de um
objeto a partir da classe.
Revisando: Como estudado na aula III, quando um parâmetro está com o operador * ou
o operador **, significa que há a compactação de parâmetros. Ela acontece quando não
se sabe quantos parâmetros são necessários para uma função em Python. Para compacta-
ção de listas ou tuplas, usa-se o operador * no parâmetro formal, na criação da função. Para
compactação de dicionários, usa-se o operador ** no parâmetro formal.
Exemplo:
Os valores dos parâmetros do método __new__() são passados depois para o método
__init__().
No exemplo acima, de forma explícita, os métodos __new__() e __init__() foram imple-
mentados na classe.
Na linha 16, criamos uma variável para apontar para o objeto recém-criado, chamando
o construtor da classe. Quando se chama o construtor, há os dois processos acontecendo:
www.grancursosonline.com.br 58
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Dificilmente há uma implementação explícita do método __new__() em questões so-
bre classes em Python. Normalmente, as questões trazem a implementação do mé-
todo __init__().
DIRETO DO CONCURSO
class ContaBancaria:
num_contas = 0
def __init__(self, agencia, numero, saldo):
self.agencia = agencia
self.numero = numero
self.saldo = saldo
ContaBancaria.num_contas += 1
def __del__(self):
ContaBancaria.num_contas -= 1
def depositar(self, valor):
self.saldo = self.saldo + valor
def sacar(self, valor):
www.grancursosonline.com.br 59
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Errado.
Quando se chama o construtor de uma classe, acontecem dois processos:
A criação de um objeto com o método __new__();
A inicialização do objeto com o método __init__().
O método __new__() é sempre chamado antes do método __init__(), quando se instancia
uma classe.
www.grancursosonline.com.br 60
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
O parâmetro self deve ser o primeiro parâmetro de qualquer método de instância
definido na classe (que estudaremos na seção 2.2.5), ou seja, são métodos que tra-
balham com atributos de instância dos objetos.
variável = NomeClasse()
ATENÇÃO
Não passamos um valor como parâmetro real para o parâmetro self. O parâmetro self
é usado dentro do método __init__() para acessar atributos de instância definidos na
classe. Isso também acontece com outros métodos de instância definidos na classe.
Exemplo:
www.grancursosonline.com.br 61
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Para criar um objeto da nova versão da classe Professor, precisamos chamar o constru-
tor, passando dois parâmetros: um para nome e outro para disciplina:
• rogerio.nome;
• rogerio. disciplina.
DIRETO DO CONCURSO
Certo.
Todas as classes possuem o método __init__(), que sempre é executado após a criação de
um objeto a partir de classe. O método __init__() é executado após o método __new__().
Acredito que o adjetivo “opcional” seja pelo fato de o programador explicitamente trabalhar
o método ou não.
Quando o método __init__() não é trabalhado explicitamente na classe, utilizamos o cons-
trutor padrão, sem parâmetros:
variável = NomeClasse()
www.grancursosonline.com.br 62
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
class Cliente:
___I___
self.nome = nome
self.renda = renda
p1 = Cliente(“Maria”, 5678.98)
print(p1.nome)
print(p1.renda)
Para que o código seja compilado e executado corretamente, a lacuna I deverá ser
preenchida com
a. __init__(self, nome, renda):
b. function __init(self, nome, renda):
c. def __construct(self, nome, renda):
d. def __init__(self, nome, renda):
e. Cliente(self, nome, renda):
Letra d.
Organizando o código da questão e verificando o resultado de sua execução, temos:
Para que o código seja compilado e executado corretamente, a lacuna I deverá ser pre-
enchida com:
A letra D traz a linha que falta para que o código seja executado.
No código da questão, temos a classe Cliente com dois atributos de instância: nome e renda.
Ao chamar o construtor da classe Cliente na linha 6 do código organizado:
www.grancursosonline.com.br 63
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Letra b.
Organizando o código da questão e verificando o resultado de sua execução, temos:
www.grancursosonline.com.br 64
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
No código da questão, temos a classe Empregado com três atributos de instância: nome,
sexo e salário.
Como estudado, quando o objeto é criado a partir dessa classe, o método __init__() inicia-
liza os atributos de instância.
Na linha 7 do código organizado, há a variável Fulano, que apontou para um objeto da
classe Empregado. O objeto foi criado chamando o construtor da classe e passou por três
parâmetros reais: “Fulano de Tal”, “m” e 2500.00.
Na linha 8, foram impressos o intervalo da posição 0 até a posição 5 do valor do atributo de
instância nome (“Fulano”) e o valor do atributo de instância salario (2500.00).
Na linha 9, foram impressos os valores dos atributos de instância nome, sexo e salário.
1 class A:
2 a = 1
3 class B(A):
4 _c = 3
5 def__init__(self):
6 print self.a
7 print self._c
8 a = A()
9 print isinstance(a, B)
10 b = B()
11 print isinstance(b, B)
12 b = A()
13 print isinstance(b, A)
Certo.
Fazendo uma comparação com linguagens como C++ e Java, o método __init__() é se-
melhante ao conceito puro dos construtores. Os construtores são usados para inicializar
o estado do objeto.
www.grancursosonline.com.br 65
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Os membros (atributos e métodos) definidos em uma classe em Python são públi-
cos, o que faz com que qualquer objeto possa ter acesso direto aos atributos ou mé-
todos de outro objeto. Além disso, os métodos definidos em uma classe são virtu-
ais, ou seja, são métodos cujo comportamento pode ser sobrescrito em uma classe
derivada por um método com a mesma assinatura. Esse conceito é uma parte muito
importante do polimorfismo em programação orientada a objetos.
Como uma sintaxe mais completa, podemos ter a seguinte sintaxe para a criação de uma
classe, com a implementação explícita do método __init__() (com atributos de instância) e a
criação de um método de instância:
class NomeClasse:
def __init__(self, parâmetro 1, parâmetro 2, parâmetro N):
self.atributo 1 = parâmetro 1
self.atributo 2 = parâmetro 2
self.atributo N = parametron N
def nomeMetodo(self, [parâmetro 1, parâmetro 2,...]):
{bloco de instruções}
[return] {valor}
Exemplo:
www.grancursosonline.com.br 66
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Além disso, criamos o método de instância gerarDados(), que retorna uma string conca-
tenada com os valores dos atributos de instância nome e a disciplina do objeto criado a partir
da classe Professor.
Na linha 10, temos a variável rogerio, que apontou para um objeto da classe Professor:
www.grancursosonline.com.br 67
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
DIRETO DO CONCURSO
Certo.
O parâmetro self deve ser o primeiro parâmetro de qualquer método de instância definido
na classe, ou seja, é o método que trabalha com atributos de instância dos objetos.
class ContaBancaria:
num_contas = 0
def __init__(self, agencia, numero, saldo):
self.agencia = agencia
self.numero = numero
self.saldo = saldo
ContaBancaria.num_contas += 1
def __del__(self):
ContaBancaria.num_contas -= 1
def depositar(self, valor):
self.saldo = self.saldo + valor
def sacar(self, valor):
self.saldo = self.saldo -valor
def consultarSaldo(self):
return self.saldo
Palavra self deve ser fornecida como argumento em todos os métodos de instâncias.
Certo.
O parâmetro self deve ser o primeiro parâmetro de qualquer método de instância definido
na classe, ou seja, é o método que trabalha com atributos de instância dos objetos.
Todos os métodos do código da questão são de instância, por isso que eles possuem como
primeiro parâmetro o self.
www.grancursosonline.com.br 68
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
www.grancursosonline.com.br 69
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
O código do exemplo é mais enxuto que o primeiro exemplo. Na linha 10, a mudança do
valor do atributo curso aconteceu a partir do nome da variável rogerio, que apontou para uma
instância da classe Professor. Com isso, o atributo curso agora virou um atributo de instância
para o objeto.
Veja que o valor do atributo curso mudou apenas para o objeto apontado variável rogerio
(linhas 11 a 13).
Agora estudaremos o método de classe, também chamado de método estático. Ele é
um método que trabalha com atributos de classe e, por isso, não precisa do parâmetro self.
A sintaxe da criação de método segue a sintaxe de funções vista na seção 1.2, porém
adicionada com a anotação @staticmethod:
@staticmethod
def nomeMetodo([parâmetro 1, parâmetro 2,...]):
{bloco de instruções}
[return] {valor}
www.grancursosonline.com.br 70
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
Podemos também acessar os atributos e métodos de classe através das variáveis que
referenciam os objetos dessa classe:
www.grancursosonline.com.br 71
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
No exemplo, o valor do atributo de classe curso se manteve o mesmo para os dois obje-
tos criados (rogerio e washington).
Vejamos outro exemplo:
• Atributo de classe:
– num_contas.
• Atributos de instância:
– agencia;
– numero;
– saldo;
• Método de classe:
– consultarNumeroContas().
www.grancursosonline.com.br 72
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
• Métodos de instância:
– depositar();
– sacar();
– consultarSaldo().
ContaBancaria.num_contas += 1
Temos dois objetos, por isso o valor do atributo num_contas é igual a 2. Podemos aces-
sar o valor desse atributo de classe a partir:
• Do nome da classe:
– Acessando o atributo: ContaBancaria.num_contas; ou
– Acessando o método de classe: ContaBancaria.consultarNumeroContas();
• Do objeto da classe:
– Acessando o atributo: conta1.num_contas; ou
– Acessando o método de classe: conta2.consultarNumeroContas();
DIRETO DO CONCURSO
class ContaBancaria:
num_contas = 0
def __init__(self, agencia, numero, saldo):
self.agencia = agencia
self.numero = numero
self.saldo = saldo
www.grancursosonline.com.br 73
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ContaBancaria.num_contas += 1
def __del__(self):
ContaBancaria.num_contas -= 1
def depositar(self, valor):
self.saldo = self.saldo + valor
def sacar(self, valor):
self.saldo = self.saldo -valor
def consultarSaldo(self):
return self.saldo
Errado.
Segundo o código da questão, e como foi estudado na parte teórica nesta seção, num_
contas é um atributo de classe, ou seja, é um valor único para classe, e não para suas
instâncias. Então não há uma variável individual para cada instância.
class ContaBancaria:
num_contas = 0
def __init__(self, agencia, numero, saldo):
self.agencia = agencia
self.numero = numero
self.saldo = saldo
ContaBancaria.num_contas += 1
def __del__(self):
ContaBancaria.num_contas -= 1
def depositar(self, valor):
self.saldo = self.saldo + valor
def sacar(self, valor):
self.saldo = self.saldo -valor
def consultarSaldo(self):
return self.saldo
Palavra @static escrita antes da definição do método sacar() torna o método estático.
www.grancursosonline.com.br 74
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Errado.
O método sacar(), por trabalhar com o atributo de instância saldo, não deveria ser um mé-
todo estático ou de classe.
Além disso, se houvesse um método de classe, ele não deveria possuir o parâmetro self e
deveria ser anotado com @staticmethod, e não com @static.
1 class A:
2 a = 1
3 class B(A):
4 _c = 3
5 def__init__(self):
6 print self.a
7 print self._c
8 a = A()
9 print isinstance(a, B)
10 b = B()
11 print isinstance(b, B)
12 b = A()
13 print isinstance(b, A)
www.grancursosonline.com.br 75
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
A princípio, vamos entender como deletar um objeto. Para isso, podemos usar a
palavra-chave del.
Exemplo:
Como o objeto foi deletado na linha 13, então haverá um erro na linha 14 (print(rogerio.
gerarDados())): o objeto ‘rogerio’ não foi definido.
Ao ser deletado, pode-se limpar (fechar) recursos abertos no método __init__(), por
exemplo, um arquivo ou uma conexão de banco de dados. Isso pode ser feito implemen-
tando o método __del__().
Esse método, assim como o método __init__(), é um método especial de uma classe.
Também é nomeado de método destruidor e é acionado quando a instância (objeto) da
classe está prestes a ser destruída.
ATENÇÃO
O nome do método __del__() é um nome padrão em Python.
Sintaxe:
def __del__(self):
{bloco de instruções}
[return] {valor}
www.grancursosonline.com.br 76
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
Exemplo:
www.grancursosonline.com.br 77
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Perceba que, no exemplo acima, ao ser criado o objeto referenciado pela variável conta1,
o valor de num_contas foi incrementado em 1. Assim acontece quando é criado o objeto da
variável conta2, fazendo o atributo num_contas passar para 2. Ao se deletar o objeto da vari-
ável conta 1, o valor de num_contas foi decrementado em 1.
Como uma sintaxe mais completa, podemos ter a seguinte sintaxe para a criação de uma
classe, com a implementação explícita do método __init__() (com atributos de instância), a
criação de um método de instância e a implementação explícita do método __del__():
class NomeClasse:
def __init__(self, parâmetro 1, parâmetro 2, parâmetro N):
self.atributo 1 = parâmetro 1
self.atributo 2 = parâmetro 2
self.atributo N = parametron N
def nomeMetodo(self, [parâmetro 1, parâmetro 2,...]):
{bloco de instruções}
[return] {valor}
def __del__(self):
{bloco de instruções}
[return] {valor}
ATENÇÃO
Assim como o método __new__(), dificilmente há uma implementação explícita do
método __del__() em questões sobre classes em Python. Normalmente, as questões
trazem a implementação do método __init__().
www.grancursosonline.com.br 78
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Criar uma classe é como criar um novo “tipo” de objetos, permitindo que instâncias desse
tipo sejam produzidas.
Exemplo:
<class ‘__main__.Professor’>
Essa unificação dos conceitos de classes e dos tipos de objetos iniciou a partir do
Python 2.2, com a entrada das classes new-style. A principal motivação para a introdução
dessas classes é fornecer um modelo de objeto unificado com um metamodelo completo.
Até a versão 2.1 da linguagem Python, o conceito de classe não era o mesmo que o
conceito de tipo de um objeto. Isso acontecia quando havia, nessa versão do Python, o tipo
clássico de classes ou classes old-style.
Quando existia esse tipo de classe, a instrução objeto.__ class__ retornava a classe
do objeto (como vimos mais acima), entretanto, ao usar type(objeto), retornava <type ‘ins-
tance’>. Isso porque todas as instâncias de classes old-style, independentemente de sua
classe, eram implementadas com um único tipo integrado, chamado instance.
www.grancursosonline.com.br 79
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Da versão 2.2 até antes da versão 3 da linguagem Python, os dois tipos de classes
existiam, por razões de compatibilidade. As classes old-style foram removidas do
Python 3, existindo apenas as classes new-style. Portanto, todas as classes neste
curso são new-style.
class ClasseNewStyle(object):
{bloco de instruções}
class ClasseOldStyle:
{bloco de instruções}
ATENÇÃO
Uma classe new-style é uma classe derivada do tipo de alto-nível object. Já uma clas-
se old-style é aquela que não tem uma classe base ou aquela que é derivada somen-
te de outras classes old-style.
class ClasseNewStyle:
{bloco de instruções}
Mesmo assim, com essa nova sintaxe para as classes new-style, elas continuam des-
cendendo direta ou indiretamente do tipo de alto-nível object. Quando não é informado expli-
citamente uma superclasse na declaração de uma classe, então essa classe descende do
tipo object.
www.grancursosonline.com.br 80
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
ATENÇÃO
Todas as classes new-style descendem direta ou indiretamente do tipo de alto-ní-
vel object.
DIRETO DO CONCURSO
Letra b.
Comentando cada letra:
a. Errada. As classes new-style permitem a unificação entre os conceitos de classes e dos
tipos de objetos.
b. Certa. Todas as classes new-style descendem direta ou indiretamente do tipo de alto-ní-
vel object.
c. Errada. As classes new-style surgiram na versão 2.2 da linguagem Python.
d. Errada. Há dois tipos de herança: simples e múltipla. As classes new-style em Python
possuem suporte aos dois tipos.
Portando, letra B é nosso gabarito.
isinstance(objeto, tipo)
www.grancursosonline.com.br 81
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
Exemplo:
www.grancursosonline.com.br 82
PYTHON – FUNÇÕES E POO
Professor: Rogério Araújo
REFERÊNCIAS
3. DOWNEY, Allen B. Pense Python. 2 ed. Tradução do livro Pense em Python (2ª ed.), de
Allen B. Downey. Disponível em: https://penseallen.github.io/PensePython2e/. Acesso em:
13 jan. 2023.
4. MATOS, David. Por que Cientistas de Dados escolhem Python?. Disponível em: http://
www.cienciaedados.com/por-que-cientistas-de-dados-escolhem-python/. Acesso em: 13
jan. 2023.
www.grancursosonline.com.br 83
PYTHON – FUNÇÕES E POO #VEM
SER
Professor: Rogério Araújo
ASSINATURA GRAN
ILIMITADA
CONCURSOS, OAB E RESIDÊNCIAS
FACILITE SEUS ESTUDOS: TUDO NO SEU TEMPO VOCÊ NÃO ESTÁ SOZINHO:
rotas de aprovação, mapas E ESPAÇO: mentorias diárias, ao vivo,
mentais, resumos e faça o download de e fórum de dúvidas não
exercícios irão te guiar por videoaulas e de PDFs e te deixarão só
um caminho mais simples estude onde e quando nesta caminhada.
e rápido. você quiser e puder.