Почему в python 2-й объект после построения имеет данные 1-го объекта? - PullRequest
0 голосов
/ 10 июля 2020

Я написал класс классификатора python3, который выглядит следующим образом:

class BayesPredictor:
    word_counts = {}

    def train(X, y):
        ... populates word_counts dictionary with data ...

Когда я создаю объект BayesPredictor в первый раз, словарь word_counts пуст:

predictor = BayesPredictor()
print(predictor.word_counts) # prints {}

Однако, когда я обучаю первый объект, а затем снова создаю другой объект:

predictor.train(X, y) # here X and y are my training data

predictor2 = BayesPredictor()
print(predictor2.word_counts) # prints { 'goodies': 1, 'mat': 1, 'uve': 1, ... }

, я вижу, что второй объект уже имеет записи в словаре word_counts даже до фазы обучения .

Почему это происходит?

Ответы [ 2 ]

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

word_counts - это атрибут класса, общий для всех экземпляров BayesPredictor. Если вам нужен отдельный dict для каждого экземпляра, вам необходимо создать новый пустой dict для каждого экземпляра, в идеале в __init__:

class BayesPredictor:
    def __init__(self):
        self.word_counts = {}

    ....
0 голосов
/ 10 июля 2020

Это потому, что word_counts - это переменная класса. Это означает, что все экземпляры вашего класса будут использовать эту переменную.

Вам нужна переменная экземпляра.

Ваш код можно изменить следующим образом:

class BayesPredictor:
    def __init__(self):
        self.word_counts = {}

    def train(X, y):
        ... populates word_counts dictionary with data ...
...