1

I have some problem with understandig how to declare object instance attribute. Here is my code:

class TestItem(object):
    def __init__(self):
        super(TestItem, self).__init__()

    def import_(self, value):
        self.value = value


class TestItems(object):
    def __init__(self, items=[]):
        super(TestItems, self).__init__()
        self.items = items

    def __getitem__(self, index):
        return self.items[index]

    def __len__(self):
        return len(self.items)

    def import_from_list(self, data):
        for i in data:
            item = TestItem()
            item.import_(i)
            self.items.append(item)


data = []

data.append(TestItems())
data[-1].import_from_list(['A', 'B'])

for i, j in enumerate(data):
    print('Size of data[%i] - %i' % (i, len(j)))

data.append(TestItems())
data[-1].import_from_list([1, 2])

for i, j in enumerate(data):
    print('Size of data[%i] - %i' % (i, len(j)))
    print('First element of data[%i] - %s' % (i, j[0].value))
print(data[0])
print(data[1])

Here is output:

Size of data[0] - 2
Size of data[0] - 4
First element of data[0] - A
Size of data[1] - 4
First element of data[1] - A
<__main__.TestItems object at 0x000002C0765F51D0>
<__main__.TestItems object at 0x000002C0765F52B0>

It looks like array items is shared between all instances of TestsItem but it shouldn't. What am I doing wrong?

UPD:

I fixed it like this:

class TestItems(object):
    def __init__(self, items=None):
        super(TestItems, self).__init__()
        self.items = items or []
GhostKU
  • 1,898
  • 6
  • 23
  • 32

0 Answers0