0

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メソッドを終了した後ではなく、ループ内でインクリメントされるのはなぜですか?

4

1 に答える 1

2

self名前を Buffer の新しいインスタンスに再バインドしてから、その新しいインスタンスで追加メソッドを呼び出します。これは、再バインドselfできる他の名前と同じであり、再バインドされたときに、元のオブジェクトを指す特別なプロパティを保持しないことに注意してください。次の行を削除すると、コードは期待どおりに動作するはずです。

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

コメントがあっても、その行で何をしようとしているのかわかりません。

于 2018-01-02T23:50:55.170 に答える