Задать вопрос

Как работает @property.getter?

Наткнулся на этот декоратор, изучаю, встретил setter и deleter, но нет getter...
Мне стало интересно, можно ли определить getter метод так, чтобы в зависимости от запрашиваемого типа возвращался разный тип?
Поясню:
class TestClass:
    def __init__(self, number:int)
        self._number = number
    
    @property.getter  # указываем что-то для str
    def number(self):
        return str(self._number)
    
    @property.getter # указываем что-то для int
    def number(self):
        return self._number

def test_str(string:str):
    print(type(string))
def test_int(number:int):
    print(type(number))
test = TestClass(150)
test_str(test) # Вывод: str
test_int(test) # Вывод: int

Понятное дело не для таких простых действий, но суть думаю понятна
  • Вопрос задан
  • 131 просмотр
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
shabelski89
@shabelski89
engineer
Так делать нельзя, но можно переопределять значение атрибута и в зависимости от его типа вернуть с постобработкой для указанного типа.
class TestClass:
    def __init__(self, number: (int, str)):
        self._number = number

    @property
    def number(self):
        if isinstance(self._number, int):
            return self.__int_number()
        elif isinstance(self._number, str):
            return self.__str_number()
        else:
            return self._number

    @number.setter
    def number(self, value):
        self._number = value

    def __int_number(self):
        return self._number * 100

    def __str_number(self):
        return f'Hello world - {self._number}'


value_int = 150
testInstance = TestClass(value_int)
print(testInstance.number)

value_str = '0MG'
testInstance.number = value_str
print(testInstance.number)

value_another_type = ['one', 'two']
testInstance.number = value_another_type
print(testInstance.number)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы