Сериализация данных с помощью __getstate__ в PythonPython

Программы на Python
Ответить
Anonymous
 Сериализация данных с помощью __getstate__ в Python

Сообщение Anonymous »

Привет, ребята!!
я пытаюсь выяснить, что не так с моим кодом, но результат не тот,
что я ожидал. Я просто попытался включить метод «getstate» для
сериализации данных. Это еще мой код:

Код: Выделить всё

class Examples_Classes_Singletons :

_Instance = None

def __new__(CLS):

print(
"[  DEBUG  ] Creating Class : {} | Line : {} | Module : {}".format(
CLS, CLS.__firstlineno__, CLS.__module__
)
)

if CLS._Instance is None:

print(
f"[ WARNING ] No Instance Found ! Creating Instance For Class '{CLS.__name__}' ..."
)
CLS._Instance = super().__new__(CLS)

__Instance = f""
print(f"[  DEBUG  ] Instance : {__Instance}")

return CLS._Instance

def __init__(Self):

# print( Self.__class__.__mro__ == Self.__mro__ )
# print( type( Self ) == Examples_Classes_Singletons )

if "_initialized" in Self.__dict__ and Self._initialized:

print(
f"[  DEBUG  ] The Instance Of The Class '{Self.__class__.__name__}' Is Already Initialized !"
)
return

print(f"[  DEBUG  ] Configuring Standard Variables ...")

Self.Attribute_X = "TST1"  # Instance Variable
Self.Attribute_Y = "TST2"  # Instance Variable

Self._Protected_Attribute = {}
Self._Cache = []

# print( object.__getattribute__( Self , 'Attribute_X' ) )
# print( super( ).__getattribute__( 'Attribute_X' ) )

print(
f"[  DEBUG  ] Initializing The Instance For Class '{Self.__class__.__name__}' ..."
)

Self._initialized = True

def __getstate__(Self):

State = Self.__dict__.copy()

print(State)
State["_Protected_Attribute"] = None
if "_Cache" in State:
del State["_Cache"]

return State

def __setstate__(Self, State):

Self.__dict__.update(State)
# Self._Cache = { }

if __name__ == "__main__":
pass

T = Examples_Classes_Singletons()

T_Serialized = pickle.dumps(T)
T_Deserialized = pickle.loads(T_Serialized)

print(f"Serialized   : {T_Serialized}")
print(f"Deserialized : {T_Deserialized.__dict__}")
Как видите, я пытаюсь установить для параметра _Protected_Attribute значение «Нет» и удалить

Код: Выделить всё

'_Cache'
перед сериализацией данных.
Хотя я на самом деле придерживаюсь рекомендаций, '_Cache' не будет удален.
Если я распечатываю данные

Код: Выделить всё

print(f"Deserialized : {T_Deserialized.__dict__}")
Результат:

Код: Выделить всё

Deserialized : {'Attribute_X': 'TST1', 'Attribute_Y': 'TST2', '_Protected_Attribute': None, '_Cache': [], '_initialized': True}
'_Cache' все еще доступен.
Можете ли вы помочь мне с этим и сказать мне, если код неправильный или я неправильно понялсинтаксис 'getstate'.
Заранее большое спасибо.
С уважением
ЧислоУноДЕ

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»