Должен возвращать кортеж из аргументов,который будет 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Должен возвращать кортеж из аргументов,который будет

Поиск

__getinitargs__()

 

Должен возвращать кортеж из аргументов,который будет

 

 

передаваться на вход метода __init__() при создании объекта.

 

 

 

__getstate__()

 

Должен возвращать словарь,в котором выражено состояние

 

 

объекта.Если этот метод в классе определен,то используется

 

 

атрибут __dict__,который есть у каждого объекта.

 

 

 

 

__setstate__(state)

state.

 

В следующем примере классCCуправляет своим копированием(точно так же экземпляры этого класса смогут консервироваться и расконсервироваться при помощи модуля pickle):

 

from time import time, gmtime import copy

class CC:

def __init__(self, created=time()): self.created = created self.created_gmtime = gmtime(created) self._copied = 1

 

print id(self), "init", created def __getinitargs__(self):

 

print id(self), "getinitargs", self.created return (self.created,)

 

def __getstate__(self):

 

print id(self), "getstate", self.created return {'_copied': self._copied}

def __setstate__(self, dict):

print id(self), "setstate", dict self._copied = dict['_copied'] + 1

def __repr__(self):

return "%s obj: %s %s %s" % (id(self), self._copied, self.created, self.created_gmtime)

 

a = CC()


 


print a

 

b = copy.deepcopy(a) print b

 

В результате будет получено

 

1075715052 init 1102751640.91

 

1075715052 obj: 1 1102751640.91 (2004, 12, 11, 7, 54, 0, 5, 346, 0) 1075715052 getinitargs 1102751640.91

 

1075729452 init 1102751640.91

1075715052 getstate 1102751640.91

 

1075729452 setstate {'copied': 1}

 

1075729452 obj: 2 1102751640.91 (2004, 12, 11, 7, 54, 0, 5, 346, 0)

 

Состояние объекта состоит из трех атрибутов:created,created_gmtime,copied.Первый из этих атрибутов может быть восстановлен передачей параметра конструктору.Второй-вычислен в конструкторе на основе первого.А вот третий не входит в интерфейс класса и может быть передан только через механизм getstate/setstate.Причем,по смыслу этого атрибута при каждом копировании он должен увеличиваться на единицу(хотя в разных случаях атрибут может требовать других действий или не требовать их вообще).Следует включить отладочные операторы вывода,чтобы отследить последовательность вызовов методов при копировании.

 

Механизм getstate/setstate позволяет передавать при копировании только то,что нужно для воссоздания объекта,тогда как атрибут __dict__ может содержать много лишнего.Более того,__dict__ может содержать объекты,которые просто так сериализации не поддаются,и поэтому getstate/setstate-единственная возможность обойти подобные ограничения.

Примечание:

 

Следует заметить,что сериализация функций и классов-лишь кажущаяся:на принимающей стороне должны быть определения функций и классов,передаются же только их имена и принадлежность модулям.

 

Для хранения объектов используются не только простейшие механизмы хранения вроде pickle.dump/pickle.load или полки shelve.Сериализованные объектыPythonможно хранить в специализированных хранилищах объектов(например, ZODB)или реляционных базах данных.

 

Это также касается передачи объектов по сетям передачи данных.Если простейшие объекты(вроде строк или чисел)можно передавать напрямую черезHTTP, XML-RPC, SOAPи т.д.,где они имеют собственный тип,то произвольные объекты необходимо консервировать на передающей стороне и расконсервировать на принимающей.

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 57; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.005 с.)