#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