对象变量未重置

时间:2017-01-28 03:13:24

标签: python object

我正在使用管道创建视觉跟踪程序。在我的管道中,我有以下代码:

@staticmethod
def __approx_contours(input_contours):
    output = []
    kp = None
    for contour in input_contours:
        error = 0.1*cv2.arcLength(contour, True)
        approx = cv2.approxPolyDP(contour, error, True)
        print(approx)
        kp = Keeper(approx)
        print(kp)
    if kp == None:
        return output
    for x,y in zip(kp.getX(),kp.getY()):
        output.append((x,y))
    kp.empty()
    return output

这里是守护者课程

class Keeper:

    _x = []
    _y = []

    # constructor, requires a 3-D array
    def __init__(self, third_dim):
        if third_dim.ndim == 3:
            for row in third_dim:
                for col in row:
                    self._x.append(col[0])
                    self._y.append(col[1])
        else:
            raise NotThirdDimension("Entered array was not three dimensional")
        print(self._x)
        print(self._y)

    # return object "X" array
    def getX(self):
        return self._x

    # return object "Y" array
    def getY(self):
        return self._y

    def empty(self):
        self._x = []
        self._y = []

忽略__init__中的打印语句,它们仅用于调试目的。

当前状态的示例输出:

[[[183 169]]

 [[187 323]]]
Keeper
[183, 187]
[169, 323]
<keeper.Keeper object at 0x05199630>

[[[ 62 117]]

 [[ 93 366]]

 [[187 256]]]
Keeper
[183, 187, 62, 93, 187]
[169, 323, 117, 366, 256]
<keeper.Keeper object at 0x06F10B70>

看起来我的Keeper对象中的值没有被重置,尽管调用了kp.empty()。我还注意到Keeper对象正在改变内存中的位置,也许这​​是问题的一部分,但我不确定我哪里出错了。完整代码可用here

1 个答案:

答案 0 :(得分:1)

问题是用户@ juanpa.arrivillaga说,我使用的是class属性而不是实例属性。为解决我的问题,需要对Keeper进行以下更改:

$(document).on('click', 'ul#og-grid li', function () {
   // Do Stuff Here
});