В Python, что является лучшим способом создания объектной переменной Object A, которая зависит от переменной Object B и обновляется автоматически всякий раз, когда изменяется переменная Object B?Зависимость от переменной объекта в Python
Простой пример:
class house:
house_size = 100
class room:
room_size = 30
house1 = house()
room1 = room()
house1.house_size = room1.room_size * 10
print house1.house_size #returns 300
room1.room_size = 50
print house1.house_size #still returns 300, but I would like it to return 500
В приведенном выше примере отношения между house1.house_size
и room1.room_size
определена. Однако это интерпретируется только один раз. Каков наилучший способ установить постоянную связь между этими двумя переменными, чтобы гарантировать, что house1.house_size
обновляется автоматически, когда room1.room_size
изменяется впоследствии?
Edit: Чтобы уточнить, я ищу общее решение, посредством которого объект проверяет, действительно ли все его зависимости по-прежнему «действует», когда значение его переменной объекта считывается. В приведенном выше примере переменной объекта house1.house_size
зависит от room1.room_size
Вы можете думать об этих зависимостей, аналогичных приложению электронной таблицы: Например, ячейка A1
может быть определена как =B1+B2+B3
и B1
в свою очередь, может быть определена как =C1*2
. Всякий раз, когда считывается значение ячейки A1
, оно проверяет, изменились ли какие-либо из B1
, B2
или B3
. Если это так, то значение A1
будет пересчитано до того, как значение будет возвращено. Поэтому в Python я ищу обработчик событий, который запускается всякий раз, когда считывается значение house1.house_size
, так что его значение может быть пересчитано перед возвратом.
Ответ должен быть достаточно общим, чтобы можно было обрабатывать все деревья зависимостей объектов, посредством чего каждый узел в дереве сам проверяет, все ли значения всех переменных объекта, от которых он зависит, все еще действительны и в противном случае пересчитываются.
см [../1904351/python-observer-pattern-examples-tips](http://stackoverflow.com/questions/1904351/python-observer-pattern-examples-tips) или [это] (https://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer) –
Это очень странная объектная модель. У вас должен быть класс «House», который содержит список экземпляров класса «Room», каждый из которых имеет «размер», из которого экземпляр «House» может вычислять свой собственный размер. Кроме того, 'size' должен быть переменной экземпляра, а не переменной класса. –
Просто используйте свойство. – eryksun