Функция печати вообще не работает внутри установщика и получателя свойств

#python #python-3.x #class #properties #getter-setter

Вопрос:

Я пытаюсь создать класс, который печатает при каждом изменении или получении значения. Проблема, с которой я сталкиваюсь, заключается в том, что print() операторы, которые у меня есть в геттерах и сеттерах, не работают, так как они ничего не печатают на консоль.

Я также пытался использовать @property декоратор, но безрезультатно.

Вот мой код:

 class SomeClass:
    def __init__(self, initial_value):
        self._value = initial_value

    def set_value(self, value):
        print(f"Setted value to: {self._value}") # Doesn't get printed at all
        self._value = value

    def get_value(self):
        print(f"Current value is: {self._value}") # Doesn't get printed at all
        return self._value
    
    value = property(set_value, get_value)

instance = SomeClass(0)
instance.value = 50
print(instance.value) # 50

 

ИЗМЕНИТЬ: Я обнаружил, что проблема в том, что я пытался использовать неправильное имя свойства, поэтому значение не было установлено.

Комментарии:

1. Не может размножаться. Я получаю a TypeError с аргументами, которые нужно property изменить, как показано на рисунке. Исправлено property(get_value, set_value) , код работает так, как ожидалось.

2. Если вы используете @property в качестве декоратора, то обе функции должны иметь одно и то же имя, поскольку вы хотите value быть привязаны к объекту, возвращаемому @propety и @value.setter .

Ответ №1:

Я немного изменил ваш код, и он правильный.

 class SomeClass:
    def __init__(self, initial_value = 0):
        self._value = initial_value

    def get_value(self):
        print(f"Current value is: {self._value}") # Doesn't get printed at all
        return self._value

    def set_value(self, value):
        print(f"Setted value to: {self._value}") # Doesn't get printed at all
        self._value = value

    value = property(get_value, set_value) 
  
instance = SomeClass()
  
instance.value = 50
  
print(instance.value)
 

выход:

 Setted value to: 0
Current value is: 50
50