Вы можете использовать для этого property
.
class Vector:
def __init__(self, vector):
self.vector = vector
@property
def numerical_vector(self):
return [x.value for x in self.vector]
Теперь vector.numerical_vector
всегда будет синхронизироваться. Недостатком этого метода является то, что он пересчитывается каждый раз, когда вы получаете к нему доступ, некоторые из них могут не адаптироваться к вашему конкретному приложению.
Если производительность является проблемой, вы можете добавить методы __getitem__
и __setitem__
в Vector следующим образом:
class Vector:
def __init__(self, vector):
self.vector = vector
self.numerical_vector = [float(x) for x in vector]
def __getitem__(self, i):
return self.vector[i]
def __setitem__(self, i, val):
self.vector[i] = val
self.numerical_vector[i] = float(val)
В этом случае, если вы установите vector_instance[i]
, то vector_instance.numerical_vector[i]
также будет изменено. Но если вы захотите изменить vector_instance.vector[i]
напрямую, синхронность будет нарушена.
В зависимости от варианта использования вы можете использовать любой из двух подходов. Оба имеют ограничения, но я не думаю, что можно сделать гораздо больше.