退出类方法后附加到self无效

时间:2018-01-02 23:10:15

标签: python-3.x esp8266 micropython

我试图定义一个类方法,该方法将一个随机数字列表分配给给定(预先存在的)对象,以便它在ESP8266中的MicroPython下运行。我面临的问题是,在几个append()之后,此对象的值为空。我使用的代码如下:

from urandom import getrandbits

class Buffer(list):
    def randomize(self, randdims):
        bits, nelem = 8, 1
        self = Buffer() # In case self had previous content.
        for n in randdims: nelem *= n
        for _ in range(randdims[0]):
            self.append([
                ((getrandbits(bits) / (2 ** bits)) * 2) - 1
                for _ in range(n_elem // randdims[0])
            ])

但是在运行此方法之后

>>> buf = Buffer((1,2,3,4))
>>> print(buf.randomize((2,3)))
[1,2,3,4] # instead of a random series of numbers.

self似乎根本没有改变,即使它在每次迭代中都有所增长。为什么self会在循环中递增但在退出方法后不会递增?

1 个答案:

答案 0 :(得分:2)

您正在将名称self重新绑定到Buffer的新实例,然后继续调用该新实例上的append方法。请记住,self就像任何其他可以反弹的名称一样,当它被反弹时,它不会保留任何指向原始对象的特殊属性。可以删除以下行,您的代码应该按预期工作。

self = Buffer() # In case self had previous content.

即使有评论,我也无法弄清楚你想要用那条线做些什么。