Преодоление ограничений Python относительно методов экземпляра

Я предпочитаю гибкий adoptation UML (например, эскизы белой доски) по водопад адаптация UML (например, чрезмерные документы тщательно продуманных схем, оттянутых в Visio).

UML все еще полезен для объяснения дизайна кому-то еще. Например, составной шаблон разработки легко объяснить с простыми диаграммами классов (то есть, после того, как Вы будете сделаны с теми интересными аналогиями).

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

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

8
задан Ram Rachum 25 November 2009 в 17:58
поделиться

3 ответа

Вы можете сделать это с помощью copy_reg.pickle . В Python 2.6:

import copy_reg
import types

def reduce_method(m):
    return (getattr, (m.__self__, m.__func__.__name__))

copy_reg.pickle(types.MethodType, reduce_method)

Здесь не сохраняется код метода, только его имя; но в общем случае это будет работать правильно.

Это делает работу и травление, и копирование!

15
ответ дан 5 December 2019 в 11:25
поделиться

REST - Передача состояния представления. Просто отправьте состояние, а не методы.

Чтобы передать объект X из A в B, мы делаем это.

  1. A кодирует состояние X в некоторых удобные, простые для анализа обозначения. JSON

  2. A отправляет текст JSON в B.

  3. B декодирует состояние X из JSON обозначение, реконструирующее X.

B должен иметь определения класса X, чтобы это работало. B должен иметь все функции и определения других классов, от которых зависит класс X. Короче говоря, оба A и B имеют все определения. Перемещается только представление состояния объекта вокруг.

См. любую статью о REST.

http://en.wikipedia.org/wiki/Representational_State_Transfer

http://www.ics.uci.edu/~fielding/pubs/disssment/top .htm

3
ответ дан 5 December 2019 в 11:25
поделиться

выбрать экземпляр и затем получить доступ к методу после его удаления. Выбор метода экземпляра не имеет смысла, потому что он зависит от экземпляра. Если нет, то запишите это как независимую функцию.

import pickle

class A:
     def f(self):
         print 'hi'

x = A()
f = open('tmp', 'w')
r = pickle.dump(x, f)
f.close()
f = open('tmp', 'r')
pickled_x = pickle.load(f)
pickled_x.f()
-3
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: