能有人解释一下这两者之间的区别以及为什么一个会产生错误结果;Python实例变量
这可能是个很基础的问题,但当 vecDict 在 init 函数外面初始化时,结果会不对。有人能解释一下为什么吗?
class Vector:
#vecDict = {} ## vecDict declared here gives wrong results vs in the init method.
def __init__(self, nums):
"""
:type nums: List[int]
"""
self.vecDict = {}
for i in range(len(nums)):
self.vecDict[i]=nums[i]
def getDict(self):
return self.vecDict
# Return the dotProduct of two sparse vectors
def dotProduct(self, vec):
print(vec.getDict())
print(vec.vecDict)
"""
:type vec: 'SparseVector'
:rtype: int
"""
# print(vec.getDict())
dotProd = 0
secDict = vec.getDict()
for k in secDict:
if k in self.vecDict:
dotProd += (self.vecDict[k] * secDict[k])
# print(self.vecDict)
# print(secDict)
return dotProd
向量对象会被创建并调用,具体如下:
v1 = Vector(numsA)
v2 = Vector(numsB)
ans = v1.dotProduct(v2)
示例输入:
numsA = [1,0,0,2,3]
numsB = [0,3,0,4,0]
答案 = 8
1 个回答
1
你在init外面声明变量的方式,使得这个变量成为了类变量,因此这个变量的值会被该类的所有实例共享。
如果你想让每个实例都有自己的独立变量,你需要把它放在init里面,并通过self关键字来赋值给该类的具体实例。