Suponha que temos 3 classes grandparent
e onde herda e herda de . Eu quero chamar o of in class . Como eu posso fazer isso?parent
child
parent
grandparent
child
parent
__str__
grandparent
child
class grandparent:
def __init__(self):
pass
def __str__(self):
return f'grandparent'
class parent(grandparent):
def __init__(self):
pass
def __str__(self):
return f'{super().__str__()},parent'
class child(parent):
def __init__(self):
pass
def __str__(self):
return f'{super().__str__()},child'
Neste caso se eu fizer um objeto da child
classe, depois de imprimi-lo vejo:
c = child()
print(c) # prints 'grandparent,parent,child'
Quero ver 'grandparent,child'
ligando para os avós __str__
na aula infantil.
Você sempre pode chamar o método diretamente:
Saída conforme solicitado.
Existem várias maneiras de conseguir isso.
Primeiro é passar
parent
a classe para osuper
método:Nesse caso, não precisamos saber o nome da classe " avó ". Caso você saiba o nome da classe " grantparent ", poderíamos usar o nome direto da classe:
Esses 2 métodos são a melhor prática, qualquer outra abordagem não é tão flexível.
é muito hacky, mas
isso usa
mro
(ordem de resolução do método) para obter a penúltima classe pai (a última é sempre o objeto)se você quiser obter a classe atual que é
mas isso irá falhar se você estiver usando herança múltipla
Você precisa alterar o método str da classe filha para retornar o resultado esperado.
Se você ligar:
então irá imprimir: avô, filho