Python 3 наследует несколько классов с __str__ - PullRequest
0 голосов
/ 25 октября 2018

Как использовать несколько __str__ из других классов?Например:

class A:
    def __str__(self):
        return "this"

class B:
    def __str__(self):
        return "that"

class C(A,B):
    def __str__(self):
        return super(C, self).__str__() + " those"
        # return something(A) + " " something(B) + " those"

cc = C()
print(cc)

Вывод: это те

Я бы хотел, чтобы вывод был: это то, что те

Этот пост - почти решение (с super())

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

При множественном наследовании super() ищет класс первый , который имеет атрибут, как они появляются, слева направо.Таким образом, он остановится на A.Вы можете получить доступ ко всем родительским классам с помощью специального атрибута __bases__ и выполнить цикл по ним, вызывая str для каждого из них.

0 голосов
/ 25 октября 2018

Вызовите родительские классы __str__ методы явно:

class C(A, B):
    def __str__(self):
        return A.__str__(self) + ' ' + B.__str__(self) + ' those'
        # or return '{} {} those'.format(A.__str__(self), B.__str__(self))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...