Как сделать геттер и сеттер для класса-наследника?

Рейтинг: 0Ответов: 2Опубликовано: 23.02.2023

Как сделать геттер и сеттер в классе Name чтобы я мог менять __value класса Name? Например когда пытаюсь дать значение:

n = Name()
n.value = 'Ivan'
print(n.value)

получаю ошибку:

AttributeError: 'super' object has no attribute '_Name__value'

Реализация классов:

class Field:
def __init__(self):
    self.__value = None

@property
def value(self):
    return self.__value

@value.setter
def value(self, value):
    self.__value = value


class Name(Field):

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

@property
def value(self):
    return super().value

@value.setter
def value(self, name):
    super().value = name

Ответы

▲ 0Принят

Попробуй сделать вот так

class Name(Field):

    def __init__(self, value=""):
        super().value = value

    @property
    def fvalue(self):
        return super().value

    @value.setter
    def fvalue(self, name):
        super().value = name
        
        
n = Name()
n.value = "Ivan"
print(n.value)


▲ 0

Ну так у родительского класса и нет value, а есть __value. Нужно привести имена в соответствие и все будет работать.