Analise o código Python 2.7 a seguir.class End_simples(objec...
Analise o código Python 2.7 a seguir.
class End_simples(object):
def __init__(self, rua, num, bai):
self.rua = rua
self.num = num
self.bai = bai
def Endereco(self):
return self.rua + ", " + self.num \
+ " " + self.bai
class End_com(End_simples):
def __init__(self, rua, num, bai, com):
End_simples.__init__(self,rua, num, bai)
self.com = com
def Endereco(self):
...
a = End_simples("Av Brasil", "243", \
"Floresta")
b = End_com("Av Miracema", "12", \
"Centro", "apto 3")
print(a.Endereco())
print(b.Endereco())
Sabe-se que a execução desse código produziu as duas linhas a seguir.
Av Brasil, 243 Floresta
Av Miracema, 12 Centro, apto 3
Assinale a opção que apresenta a correta definição para o
método Endereco na classe End_com.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a C.
O tema da questão é o entendimento de herança em classes e a sobreposição, ou override, de métodos em Python 2.7. Na herança de classes, uma classe filha pode herdar atributos e métodos de uma classe pai, mas também pode modificar ou estender alguns desses métodos. Este é um conceito fundamental da programação orientada a objetos (OOP), que visa promover a reutilização de código e a criação de relações hierárquicas entre classes.
No código apresentado, temos duas classes: End_simples como a classe pai e End_com como a classe filha. A classe filha herda os atributos e o método Endereco da classe pai, mas precisa adicionar informações adicionais (o complemento do endereço) ao endereço existente.
Para justificar a alternativa correta:
A alternativa C está correta porque utiliza a função super() para acessar o método da classe pai End_simples e depois estende sua funcionalidade ao adicionar o complemento do endereço. No contexto do Python 2.7, super(End_com, self).Endereco() é a maneira correta de chamar o método da classe pai de dentro da classe filha. Depois de obter o endereço da classe pai, a função adiciona a string ", " seguida pelo complemento de endereço armazenado em self.com.
A saída correta do método Endereco da classe End_com seria a concatenação do endereço fornecido pelo método Endereco da classe pai End_simples com o complemento de endereço. Portanto, a implementação correta do método Endereco na classe filha End_com deveria ser:
def Endereco(self):
return super(End_com, self).Endereco() + ", " + self.com
Isso produzirá a saída desejada conforme mostrado na execução do código na questão, onde o endereço do objeto b é corretamente formatado com o complemento.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
https://www.pythonforbeginners.com/super/working-python-super-function
return super(End_com, self).Endereco() \ + ", " + self.com
letra c
desgraça, me arrombei nessa
Versão antiga do Python, tem nem suporte mais. Se fosse Python 3+, seria:
return super().Endereco() + ", " + self.com
Em Python 2:
class SubClass(MyParentClass):
def __init__(self):
super(SubClass, self).__init__()
Em Python 3:
class SubClass(MyParentClass):
def __init__(self):
super()
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo