[英]Creating a list of references to object attributes
代碼中的問題是Vector.numerical_vector是浮點數的副本列表,但是我需要將其作為引用列表,因此,當Vector.vector [n] .value更改時,Vector.numerical_vector [n]更改為同樣的價值。
預先感謝您的幫助!
class Var:
def __init__(self, val):
self.value = float(val)
def __float__(self):
return self.value
class Vector:
def __init__(self, vector):
self.vector = vector
self.numerical_vector = [float(x) for x in vector]
vars = [Var(i) for i in range(5)]
vector = Vector(vars)
您可能要為此使用一個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
將始終同步。 該方法的一個缺點是每次您訪問它時都會重新計算它,有些可能不適合您的特定應用程序。
如果性能是一個問題,可以向Vector添加__getitem__
和__setitem__
方法,如下所示:
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]
,則同步性將被破壞。
根據使用情況,可以使用兩種方法中的任何一種。 兩者都有局限性,但我認為沒有更多的事情可以做。
沒有辦法在python中做到這一點。 您可以做的是使numerical_vector
一個對象,該對象在訪問時返回相應vector
項的float
值。 例如
class VectorWrapper:
def __init__(self, vector):
self.vector = vector
def __getitem__(self, i):
return float(self.vector[i])
並設置self.numerical_vector = VectorWrapper(self.vector)
如果您必須在引用self.numerical_vector[i]
時返回float
表示形式,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.