我正在创建对同一对象的新引用,而不是新对象

时间:2016-10-22 09:45:31

标签: python python-3.x

我没有展示全班,因为问题很难简化,但我认为以下是关键:

class helper:
    sharex = False
    sharey = False

    _objects = []

    _figures = []
    _axes = []


    def __init__(self):
        pass

    def create(self):
        figure, axes = plt.subplots(nrows=self.nrows,
                                 ncols=self.ncols,
                                 sharex=self.sharex,
                                 sharey=self.sharey)
        self._figures.append(figure)
        self._axes.append(axes)

以下内容应说明我的问题:

test = plotting.helper()
test._axes
Out[9]: []
test.create()
test._axes
Out[10]: 
[array([<matplotlib.axes._subplots.AxesSubplot object at 0x103dd1940>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x10c4a5278>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x10c1889b0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c52eeb8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c56f4a8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c5b7be0>], dtype=object)]
test2 = plotting.helper()
test2._axes
Out[11]: 
[array([<matplotlib.axes._subplots.AxesSubplot object at 0x103dd1940>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x10c4a5278>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x10c1889b0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c52eeb8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c56f4a8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x11c5b7be0>], dtype=object)]

第二个对象应该为空,并且_axes中没有任何轴存储。然而,它不仅包含轴,而且与(据称)独立的其他对象相同的轴。

为什么我不创建独立对象?

1 个答案:

答案 0 :(得分:0)

在类声明中声明_axes时,将其设为静态变量,意味着它对所有实例都是相互的。 您希望将_axes的声明移至__init__函数。