Я использую python 3. и хотел бы знать, отправляются ли данные сообщения, прикрепленные к команде pymexub Sendmessage, по ссылке или по значению? Похоже, что оно было отправлено по ссылке, но мне было интересно, может ли кто-нибудь это проверить.
Также в документации говорится: «Неизменность сообщения: содержимое сообщения должно быть оставлено без изменений слушателями, но PyPubSub не проверяет это»
В приведенном ниже примере кода предполагается, что ссылки на аргументы сообщения-данных являются отправка и изменение этих данных изменяют исходные данные (не переданную копию данных). Есть ли причина, по которой изменение данных сообщения в подпрограмме прослушивателя является плохой идеей?
from pubsub import pub
class widget():
def __init__(self):
self.thingy = [{'biz':0},{'baz':1},{'buz':2}]
pub.subscribe(self.listen_for, 'wodget')
def listen_for(self, arg1):
print('wodget heard')
print(self.thingy)
print(arg1)
def send_thingy(self):
arg1 = self.thingy
pub.sendMessage('widget',arg1=arg1)
class wodget():
def __init__(self):
self.thongy = None
pub.subscribe(self.listen_for, 'widget')
# listen calendar
def listen_for(self, arg1):
print('widget heard')
print(arg1)
self.thongy = arg1
self.thongy[1]['baz']=99
print(arg1)
print(self.thongy)
arg1 = self.thongy
pub.sendMessage('wodget',arg1=arg1)
if __name__ == "__main__":
aWidget = widget()
aWidget.send_thingy()
aWodget = wodget()
aWidget.send_thingy()