SóProvas


ID
2743312
Banca
FGV
Órgão
MPE-AL
Ano
2018
Provas
Disciplina
Programação
Assuntos

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.

Alternativas
Comentários
  • https://www.pythonforbeginners.com/super/working-python-super-function

  • Vamos analisar a estrutura deste código Python dividindo em caixas para entender a função de cada parte.

    Inicialmente é definida a classe End_simples e dentro dela um método construtor __init__ e um método chamado Endereço. Repare que o nome da classe remete ao conceito de Endereço e os 3 parâmetros do construtor (rua, número e bairro) confirmam a referência ao mesmo conceito de endereço. O método Endereço retorna um string representativo dos atributos de endereço simples.

    Depois, é definida a classe End_com que, pelo nome, sugere o conceito de Endereço composto. Ela é uma subclasse de End_Simples. Sabemos disso pela notação End_com(End_Simples). O construtor desta classe tem em comum com a classe End_simples os atributos rua, número e bairro e além disse acrescenta um novo atributo chamado com, possivelmente um complemento do endereço. Também é criada uma função Endereço só que seu corpo não é implementado.

    Na 3a caixa maior, ele cria uma instância de End_Simples e atribui à variável a e uma instância de End_com e atribui a b. Após isso, ele imprime a saída do método Endereço() de ambas as classes.

    O enunciado diz que o seguinte é impresso nessas 2 chamadas dos métodos Endereço.

     

    Reparem que o 1o print está de acordo com a definição do método Endereço() dentro da classe End_Simples.

    O 2o print também imprime os 3 parâmetros da superclasse End_Simples da mesma forma que o método Endereco() da superclasse imprime e acrescenta o atributo exclusivo da subclasse com.

    Sabemos que, em Python, para invocar um método da classe mãe usamos a palavra reservada super. Pela saída “Av Miracema, 12 Centro, apto 3” percebe-se que é feita uma concatenação do string de saída do método Endereço() da classe mãe (End_Simples) com o atributo “com” da classe filha.

    Para isso funcionar, o método Endereco() da classe filha pode invocar o Endereco() da classe mãe com super(End_com, self).Endereco() e depois concatenar isso com “,”+self.com. O self.com indica que está se fazendo referência ao atributo com da instância corrente.

    Resposta: C

  •  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