Python добавление объектов в список - проблема перезаписи объекта - PullRequest
0 голосов
/ 13 июля 2020

Я боролся с проблемой при добавлении объектов в список в Python. После получения файла JSON он присваивает каждое значение объекту House и добавляет его в список homes . Однако после добавления второго объекта он перезаписывает первый объект в списке. Не могли бы вы мне помочь?

jsonfile. json

 "features": [
    {
      "properties": {
        "id": "ea299c1e-2bbb-5a97-bb94-befe384f0eb2",
        "name": "Albert"
    },
    {
      "properties": {
        "id": "47200ba4-db80-56fa-99ad-c4abe7296376",
        "name": "Batman"
    }

python .py

class House:
    def __init__(self, id, name):
        self.id = id
        self.name=name


houses =[]

......

with open('./data/jsonfile.json', 'r') as myfile:
    data = myfile.read()
    obj = json.loads(data)['features']
    for o in obj:
        print(o['properties']['id'])
        House.id = o['properties']['id']
        House.name = o['properties']['name]
        print(House.id)
        houses.append(House)
        print("----------------------")
    print("----------------------")
    print(houses[0].id)
    print(houses[1].id)
    print(len(houses))

консоль

ea299c1e-2bbb-5a97-bb94-befe384f0eb2
ea299c1e-2bbb-5a97-bb94-befe384f0eb2
----------------------
47200ba4-db80-56fa-99ad-c4abe7296376   
47200ba4-db80-56fa-99ad-c4abe7296376
----------------------
----------------------
47200ba4-db80-56fa-99ad-c4abe7296376. <--- It should be 'ea299c1e-2bbb-5a97-bb94-befe384f0eb2'
47200ba4-db80-56fa-99ad-c4abe7296376
2

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Замените

House.id = o['properties']['id']

на

dahouse = House(o['properties']['id'])

, затем добавьте dahouse.

Как вы это написали, вы продолжаете изменять класс, не создавая новый экземпляр.

0 голосов
/ 13 июля 2020

Согласно вашему коду, вы не являетесь экземпляром объекта для домашнего класса. При добавлении в список используйте приведенный ниже код.

houses.append(House(o['properties']['id']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...