Как переопределить аргумент суперкласса __init__?

Как переопределить атрибут суперкласса? В приведенном ниже примере я хочу использовать другое значение для name.

class A:
    def __init__(self,name):
        self.name=name

class B(A):
    def __init__(self, config, address, phone):
        super(B, self).__init__(name)
        self.address=address
        self.phone=phone
        self.config=config
        self.name=self.config.name + "__value_only"

person user3327034    schedule 04.12.2017    source источник
comment
name - это просто имя переменной. Вы не можете изменить имя атрибута базового класса из унаследованного класса. Чего вы пытаетесь достичь?   -  person Chen A.    schedule 04.12.2017
comment
Передайте config.name + __value_only конструктору суперкласса   -  person Manjunath    schedule 04.12.2017
comment
@Vinny для протокола, это вполне выполнимо.   -  person jkm    schedule 04.12.2017
comment
@jkm, можешь уточнить? как вы этого добиваетесь? метаклассы?   -  person Chen A.    schedule 04.12.2017
comment
Просто передайте что-то отличное от name в вызове `super(B, self).__init__(name)`.   -  person martineau    schedule 04.12.2017


Ответы (1)


Просто передайте желаемое «другое» значение в super(...).__init__(). Кроме того, name в вашем примере - это не класс, а атрибут экземпляра:

class B(A):
    def __init__(self, config, address, phone):
        super(B, self).__init__(config.name + "__value_only")
        self.address=address
        self.phone=phone
        self.config=config
person schwobaseggl    schedule 04.12.2017
comment
Есть ли что-то особенно неправильное в определении его таким образом: ` class B(A): def __init__(self, config, address, phone): self.address=address self.phone=phone self.config=config name=self.config .name + __value_only super(B, self).__init__(name)` - person user3327034; 04.12.2017
comment
Нет, это тоже было бы хорошо. - person schwobaseggl; 04.12.2017