1

これは、コードとコメントで最もよく説明されていると思います。

import struct

class binary_buffer(str):
    def __init__(self, msg=""):
        self = msg
    def write_ubyte(self, ubyte):
        self += struct.pack("=B", ubyte)
        return len(self)

Output
>> bb = binary_buffer()
>> bb # Buffer starts out empty, as it should
''
>> bb.write_ubyte(200)
1   # We can see that we've successfully written one byte to the buffer
>> bb
''  # Huh? We just wrote something, but where has it gone?
4

1 に答える 1

4

strs は不変です。したがって、

self += struct.pack("=B", ubyte)

として評価される

self = self + struct.pack("=B", ubyte)

これにより、self という名前に新しい値が割り当てられますが、self は他の名前と同様に単なる名前です。メソッドが終了するとすぐに、名前 (および関連付けられたオブジェクト) は忘れられます。

あなたが欲しいbytearray

>>> bb = bytearray()
>>> bb.append(200)
>>> bb
bytearray(b'\xc8')
于 2013-02-02T09:13:02.710 に答える