Python 更新类中的对象值
我有一个问题,关于如何在一个类中返回一个对象的更新值,然后在同一个类中的另一个函数中使用它。这是我的旧代码Python 更新类中的对象值,python,class,object,return,Python,Class,Object,Return,我有一个问题,关于如何在一个类中返回一个对象的更新值,然后在同一个类中的另一个函数中使用它。这是我的旧代码 class Vector: def __init__(self, a): self.a = a assert type(self.a) == list for i in self.a: assert type(i) == int or type(i) == float def dim(self): return len(self.a) def
class Vector:
def __init__(self, a):
self.a = a
assert type(self.a) == list
for i in self.a:
assert type(i) == int or type(i) == float
def dim(self):
return len(self.a)
def __getitem__(self, i):
assert i >= 1 and i <= self.dim()
return self.a[i-1]
def __setitem__(self, i, x):
assert i >= 1 and i <= self.dim()
self.a[i-1] = x
return self.a[i-1]
def __str__(self):
return 'Vector: ' + str(self.a)
def __add__(self, other):
assert type(other.a) == list and other.dim() == self.dim()
n = []
for j in range(self.dim()):
n.append(self.a[j]+other.a[j])
self.a = n
return self.a
我的输出是'[3,5,7]'
,这意味着它只在返回self.a
之后,而不是\uuuu str\uuuuu
函数,但是我希望我的输出是'Vector:[3,5,7]
,因为它应该在\uu str uuuu
函数之后。我通过在\uuuu add\uuuu
函数中返回向量(self.a)
解决了这个问题,但我不知道为什么会这样。有人能解释为什么这样做,以及为什么返回self.a
不只是更新对象值并运行\uu str\uu
函数吗
注意:Python使用以下等效符号:
v[i] == v.__getitem__(i)
v[i] = x == v.__setitem__(i, x)
str(v) == v.__str__()
v + other == v.__add__(other)
是的,因为你的
\uuuuu add\uuuu
返回self.a
,这是一个列表self
是一个Vector
,self。a
是一个列表。返回类似于Vector(self.a)
的内容。但老实说,你真的想让+
在原地工作吗?这在Python中并不常见,这就是您所做的。。。但是,既然您已经这样做了,您可以只返回self
。而且\uuuuu setitem\uuuuuu
可能不应该返回任何内容。谢谢juanpa.arrivillaga!我现在明白了返回列表的问题。但是我还是不太明白你说的让+
工作是什么意思。是的,关于\uuuuuu setitem\uuuuuuuuuuuuu
你是对的,我删除了返回值。我的意思是\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu添加
修改你的一个对象,而它应该返回一个新对象。考虑已经使用“<代码> +>代码>运算符的列表工作方式:<代码> a= [1,2];b=[3,5]然后尝试打印(a+b),您将看到[1,2,3,4]
,但是a
和b
不会改变!在您的实现中,a
将改变!所以只需删除self.a=n这一行,然后只需返回向量(n)
v[i] == v.__getitem__(i)
v[i] = x == v.__setitem__(i, x)
str(v) == v.__str__()
v + other == v.__add__(other)