Я новичок в Python и не понимаю, почему я не могу этого сделать. Когда я пытаюсь изменить значения в Packet.ItemData из родительского объекта, это не сработает. См. Комментарии «Не работает» в коде.Python - Невозможно изменить значение элемента внутри класса
import json
from copy import deepcopy
class Event():
__slots__= 'itemName'
def __init__(self, itemName):
self.itemName = itemName
def encode(self):
obj = {}
obj['itemName'] = str(self.itemName)
return json.dumps(obj)
def decode(self, json_Str):
obj = json.loads(json_Str)
self.itemName = obj['itemName']
class Packet():
__slots__= 'pID', 'itemData'
def __init__(self, pID, itemData):
self.pID = pID
self.itemData = itemData
def encode(self):
obj = {}
obj['pID'] = int(self.pID)
obj['itemData'] = str(self.itemData.encode())
return json.dumps(obj)
def decode(self, json_Str):
obj = json.loads(json_Str)
self.pID = obj['pID']
self.itemData = Event(0,'')
defaultEvent = Event('Dflt')
defaultPacket = Packet(1, defaultEvent)
event2 = Event('NoName')
print 'event : ', event2.encode()
packet3 = deepcopy(defaultPacket)
packet3.ItemData = event2; #direct assign doesn't work
packet3.ItemData = deepcopy(event2); #deep copy doesn't work
packet3.ItemData.itemName = 'Hello' #event this doesn't work
print 'packet : ', packet3.encode()
Я хотел, чтобы обернуть данные таким образом я получаю именно то, что я ожидал, когда кодирование и декодирование с JSON.
Спасибо , Я ненавижу погоню чувствительной, поэтому использую паскаль. Я пытался использовать слоты, чтобы предотвратить добавление дополнительных данных. – runfastman