Витой каркас нуждается в пояснениях - PullRequest
1 голос
/ 11 апреля 2019

Пока я просматривал код в обучающих программах по «написанию серверов», я прошел через следующие строки кода, которые запутали меня.

class Chat(LineReceiver):
    def __init__(self,users):
        self.users = users

class ChatFactory(Factory):

    def __init__(self):
        self.users = {} # maps user names to Chat instances
    def buildProtocol(self, addr):
        return Chat(self.users)

Кто-нибудь, пожалуйста, объясните, как self.users в классе ChatFactoryобновляется всякий раз, когда обновляется self.users в классе чата.

1 Ответ

2 голосов
/ 11 апреля 2019

В:

f = ChatFactory()
p = f.buildProtocol(some_address)

выражения f.users и p.users относятся к одному и тому же словарю. Это связано с тем, что ChatFactory.buildProtocol передает self.users инициализатору Chat, а инициализатор Chat сохраняет ссылку на него.

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

...