能有人解释一下这两者之间的区别以及为什么一个会产生错误结果;Python实例变量

1 投票
1 回答
41 浏览
提问于 2025-04-14 18:00

这可能是个很基础的问题,但当 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关键字来赋值给该类的具体实例。

https://pynative.com/python-class-variables/

撰写回答