Python bytearray()索引赋值

2024-05-19 13:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是系统管理员,不是开发人员。下面的代码对我很好。但是当我把它分成两个文件,这样类就在一个文件中,而逻辑在另一个文件中时,我会得到一个错误,数据[0]是str,不支持赋值

条状工作示例

class partition:
    def __init__(self):
        self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
        return

    def boot_flag(self, value=None):
        if value is not None:
            self.data[0] = value
            return
        else:
            return self.data[0:1][::-1]


part1 = partition()
print str(part1.data).encode('hex')
value = b"\xff"
part1.boot_flag(value)
print str(part1.data).encode('hex')

这是现在的全班同学。

class partition:
    def __init__(self):
        self.data = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

    def boot_flag(self, value=None):
        if value is not None:
            self.data[0] = value
            return
        else:
            return self.data[0:1][::-1]

    def start_chs(self, value=None):
        if value is not None:
            self.data[1:4] = value
            return
        else:
            return self.data[1:4][::-1]

    def type(self, value=None):
        if value is not None:
            self.data[4:5] = value
            return
        else:
            return self.data[4:5][::-1]

    def end_chs(self, value=None):
        if value is not None:
            self.data[5:8] = value
        else:
            return self.data[5:8][::-1]

    def start_lba(self, value=None):
        if value is not None:
            self.data[8:12] = value
        else:
            return self.data[8:12][::-1]

    def sectors(self, value=None):
        if value is not None:
            self.data[12:16] = value
        else:
            return self.data[12:16][::-1]

    def load(self, data):
        self.data = data
        return

这是我用来测试班级的测试夹具。

import dospart
disk = open('/dev/sda', 'rb')
mbr = disk.read(512)
part1 = dospart.partition()
part1.load(mbr[446:462])
print str(part1.data).encode('hex')
part1.boot_flag(b"\xff")
print str(part1.data).encode('hex')

这就是错误

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    part1.boot_flag(b"\xff")
  File "/Users/digitaladdictions/PycharmProjects/dospart/dospart.py", line 9, in boot_flag
    self.data[0] = value
TypeError: 'str' object does not support item assignment

请注意,我可以很好地读取这些值。我只在尝试写入self.data[]时出错

[更新]

基于已接受的答案,这是我的新加载函数。

def load(self, data):
    part = bytearray(data)
    self.data = part
    return

Tags: selfnonedatareturnifisvaluedef