2015-02-26 4 views
-1

Извините, что это noob, это может быть глупая ошибка, но я новичок в python, поэтому, пожалуйста, помогите.Python Class, Objects & Objects

Я хочу иметь список объектов в python. Для сущности я использую словарь. EntityList.py - вот так.

from EmployeeEntity import Entity 
class AddEmployee: 
    def AddEmployeeByUserInput(self): 
     EmployeeList = [] 
     while (input('Do you want to enter an entry y/n:') == 'y'): 
      objEmployee = Entity.employee 
      objEmployee['id'] = input('Enter id: ') 
      objEmployee['fname'] = input('Enter first name: ') 
      objEmployee['lname'] = input('Enter last name: ') 
      objEmployee['address'] = input('Enter city: ') 
      objEmployee['contact'] = input('Enter contact number: ') 
      EmployeeList.append(objEmployee) 

     print(EmployeeList) 



objAddEmployee = AddEmployee() 
objAddEmployee.AddEmployeeByUserInput() 

EmployeeEntity.py - вот так.

class Entity: 
employee = {'id':'',\ 
      'fname':'',\ 
      'lname':'',\ 
      'address':'',\ 
      'contact':''} 

Это то, что я вхожу &, что я получаю в качестве выхода.

Do you want to enter an entry y/n:y 
Enter id: 1 
Enter first name: Brijesh 
Enter last name: Parekh 
Enter city: Ahmedabad 
Enter contact number: 7545454574 
Do you want to enter an entry y/n:y 
Enter id: 2 
Enter first name: Kandarp 
Enter last name: Mehta 
Enter city: Bhavnagar 
Enter contact number: 3845735375 
Do you want to enter an entry y/n:n 

[{ 'ID': '2', 'имя_файла': 'Kandarp', 'адрес': 'Бхавнагара', 'LNAME': 'Мехта', 'контакт': '3845735375'}, {'id': '2', 'fname': 'Kandarp', 'address': 'Bhavnagar', 'lname': 'Mehta', 'contact': '3845735375'}]

Мои последние введенные данные перезаписать все старые.

+0

переместите строку 'EmployeeList = []' вне функции (например, перед определением функции, но внутри класса). Способ, которым вы его реализовали - этот список повторно создается при любом вызове 'AddEmployeeByUserInput()', когда вы действительно хотите сохранить * состояние * даже после того, как функция завершила свое выполнение. – alfasin

+0

Сначала я сделал, как вы сказали. Дает тот же результат. Как переменная класса, мне просто нужно вызвать self.EmployeeList.append (objEmployee) и print (self.EmployeeList) –

+0

И я хочу создать и распечатать список сущностей только одним и тем же методом. Состояние переменной изменяется после завершения метода, но я печатаю Entitylist в области метода, что не должно вызывать изменения состояния. Я отлаживал его и обнаружил, что цикл повторяется во второй раз, он меняет членов в objEmployee и уже добавленном члене в списке одновременно –

ответ

1

aftasin ответил на это в комментариях, но я надену его здесь. Переместите строку EmployeeList = [] вне функции (например, перед определением функции, но внутри класса). Способ, которым вы его реализовали - этот список повторно создается при любом вызове AddEmployeeByUserInput(), когда вы действительно хотите сохранить состояние даже после того, как функция завершила свое выполнение.

+0

Извините, чувак. Выполнение этого не дает мне решение, которое я хочу, как я уже говорил в комментариях. Это дает мне ту же проблему. Перезапись фактического списка сущности. –

+0

Это мое сущность. класс Объект: employee = {'id': '', \ 'fname': '', \ 'lname': '', \ 'адрес': '', \ 'contact': ''} Вы можете создать для него новый «.py» файл, импортировать класс в другой файл и написать код с изменениями, как вы сказали. Проблема все еще остается –

+0

. Я получил свой ответ отсюда, http://stackoverflow.com/questions/11492656/create-list-of-dictionary-python Используя метод deepcopy, вы можете добавить копию в список, а не ссылку ,Таким образом, новые детали не будут перезаписывать старые, потому что вы добавляете их в список. Спасибо за помощь. –