Python: как вызвать новый экземпляр класса в методе класса - PullRequest
0 голосов
/ 28 ноября 2018

Я столкнулся со следующей проблемой в Python:

У меня есть класс с именем BasebookDataContainer, который в основном является коллекцией Dicts.

Внутри метода этого класса я вызываюновый экземпляр BasebookDataContainer вроде этого:

class BasebookDataContainer:  
    def generate_sub_basebook(self, columnlist):  
       ....  
       newinstance = BasebookDataContainer()

Происходит много странных вещей:

  1. newinstance автоматически загружается со всеми данными экземпляра "self"класса BasebookDataContainer
  2. Когда я изменяю данные newinstance, он также меняет данные экземпляра "self"

Это нормально и есть ли способчтобы избежать этого?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 30 ноября 2018

Спасибо всем телам за обратную связь.
На самом деле я допустил ошибку:
В классе BasebookDataContainer я объявил структуру данных, содержащую список полей (списки, слова, строки)и т. д.) непосредственно в определении класса.В результате, когда было несколько экземпляров объектов одного класса, все эти атрибуты были сохранены в одном и том же адресе памяти.Это была моя ошибка, так как у меня есть фон C ++.
Правильный способ сделать это:
Не объявляйте поля структуры в определении класса (оставьте значения в None) и выделите память в init () метод класса.Теперь работает отлично.Урок выучен.

...