Применение логики установки свойств в __init__ - PullRequest
0 голосов
/ 20 ноября 2018

Я прочитал ответ с установкой атрибута в python и получением ошибка максимальной глубины рекурсии .

Как и где я должен проверять и проверять значение при настройкеатрибут?Я знаю, что могу проверить это в setter, но хорошо ли это проверять в __init__() класса?Если я отмечу это в __init__(), то мои setter и __init__ будут повторять код.

Пример моего кода:

class RealNumber:

    def __init__(self, real):
        self._real = real  # NEED TO TEST IT BEFORE ASSIGNMENT
                           # TEST IS SAME AS IN SETTER

    @property
    def real(self):
        return self._real

    @real.setter
    def real(self, value):
        if isinstance(value, int):
            self._real = value
        else:
            raise ValueError('Can not set real part with value {}'.format(value))

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете просто выдать self.real = real в __init__.Установщик свойств уже действует.

class RealNumber:
    def __init__(self, real):
        self.real = real

    @property
    def real(self):
        return self._real

    @real.setter
    def real(self, value):
        if isinstance(value, int):
            self._real = value
        else:
            raise ValueError('Can not set real part with value {}'.format(value))


r = RealNumber(3)
print(r._real)
print(r.real)
print(vars(r))

try:
    RealNumber('bogus')
except ValueError:
    print('error as expected')

Вывод:

3
3
{'_real': 3}
error as expected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...