Как дополнить метод родителя, который не меняет объект?

Мне нужно дополнить метод родительского класса, который не изменяет состояния объекта, а просто возвращает некоторые представления атрибутов объекта в виде списка со строками. Можно ли сделать более это более корректно чем у меня в примере?

class class1:

def __init__(self):
    self.param1 = 1

def parameters(self):
    params  = list()
    params.append(f'param1 is {self.param1}')

    return params

class class2(class1):        

def __init__(self, param2):
    super().__init__()
    self.param2 = param2

def parameters(self):
    params = super().parameters()
    params.append(f'param2 is {self.param2}')

    return params

Ответы (1 шт):

Автор решения: CrazyElf

Если я всё правильно понял (что не факт), то лучше сделать как-то так:

class Class1:

    def __init__(self, param1):
        self.params  = dict()
        self.params['param1'] = param1

    def parameters(self):
        return self.params

class Class2(Class1):        

    def __init__(self, param1, param2):
        super().__init__(param1)
        self.params['param2'] = param2

c2 = Class2(1, 2)
print(c2.parameters())

Вывод:

{'param1': 1, 'param2': 2}
  • Названия классов нужно писать с большой буквы
  • Для хранения уникальных атрибутов лучше использовать словарь, а не список
  • Все инициализации лучше делать в конструкторе __init__, не вижу смысла каждый раз создавать новый объект для хранения атрибутов при вызове метода, когда его можно создать заранее. При использовании словаря вам не нужно будет заново генерить весь список, достаточно будет заменить в словаре конкретный параметр.

Если же вам действительно необходимо каждый раз выставлять param2 именно при вызове метода parameters, а не при создании класса Class2, то код будет немного другой, хотя и на тех же принципах:

class Class1:

    def __init__(self, param1):
        self.params  = dict()
        self.params['param1'] = param1

    def parameters(self):
        return self.params

class Class2(Class1):        

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

    def parameters(self, param2):
        self.params['param2'] = param2
        return self.params

c2 = Class2(1)
print(c2.parameters(2))

Вывод точно такой же будет, как и раньше:

{'param1': 1, 'param2': 2}
→ Ссылка