Как расширить список из метода унаследованного класса - PullRequest
1 голос
/ 09 марта 2020

У меня есть два класса: BaseClass и Antifraud, который является производным от BaseClass. В BaseClass есть метод, который имеет список, например:

class BaseClass:
    def __init__(self):
        pass

    def create_metrics(self):
        self.metrics_list = ['score',
                             'precision',
                             'recall']

Я хочу, чтобы при создании экземпляра класса Antifraud список self.metrics_list был таким же, как и раньше, плюс 'f1'. Я пробовал следующее:

class Antifraud(BaseClass):

    def __init__(self):
        super().__init__()

        self.metrics_list.extend(['f1'])

a = Antifraud()

Но я получаю сообщение об ошибке:

AttributeError: 'Antifraud' object has no attribute 'metrics_list'

Как мне решить мою проблему? Можно ли вообще этого добиться? Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете вызвать метод create_metrics, прежде чем расширять self.metrics_list, вызвав сначала create_metrics, который вы создаете self.metrics_list:

class Antifraud(BaseClass):

    def __init__(self):
        super().__init__()
        self.create_metrics()
        self.metrics_list.extend(['f1'])
print(Antifraud().metrics_list)

output:

['score', 'precision', 'recall', 'f1']
0 голосов
/ 09 марта 2020

Не рекомендуется инициализировать атрибуты экземпляра за пределами __init__

. Вы можете обновить BaseClass до

    class BaseClass:
        def __init__(self):
            self.metrics_list = ['score', 'precision', 'recall']

, а затем AntiFraud класс. будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...