退出 class 方法后附加到 self 无效
Appending to self has no effect after exiting class method
我正在尝试定义一个 class 方法,该方法将随机数字列表分配给给定的(预先存在的)对象,以便它在 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
在循环内递增,但在退出方法后不递增?
您正在将名称 self
重新绑定到 Buffer 的新实例,然后继续在该新实例上调用 append 方法。请记住,self
就像任何其他可以重新绑定的名称一样,当它重新绑定时,它不会保留任何指向原始对象的特殊属性。可以删除以下行,您的代码应按预期工作。
self = Buffer() # In case self had previous content.
即使有评论,我也无法弄清楚你想用那句话做什么。
我正在尝试定义一个 class 方法,该方法将随机数字列表分配给给定的(预先存在的)对象,以便它在 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
在循环内递增,但在退出方法后不递增?
您正在将名称 self
重新绑定到 Buffer 的新实例,然后继续在该新实例上调用 append 方法。请记住,self
就像任何其他可以重新绑定的名称一样,当它重新绑定时,它不会保留任何指向原始对象的特殊属性。可以删除以下行,您的代码应按预期工作。
self = Buffer() # In case self had previous content.
即使有评论,我也无法弄清楚你想用那句话做什么。