Превосходный вопрос. Я занялся этой проблемой также, и в то время как я соглашаюсь, что "фабрики" (конструкторы метода класса) являются хорошим методом, я хотел бы предложить другого, которого я также нашел очень полезными:
Вот образец (это read
, метод и не конструктор, но идея является тем же):
def read(self, str=None, filename=None, addr=0):
""" Read binary data and return a store object. The data
store is also saved in the interal 'data' attribute.
The data can either be taken from a string (str
argument) or a file (provide a filename, which will
be read in binary mode). If both are provided, the str
will be used. If neither is provided, an ArgumentError
is raised.
"""
if str is None:
if filename is None:
raise ArgumentError('Please supply a string or a filename')
file = open(filename, 'rb')
str = file.read()
file.close()
...
... # rest of code
ключевая идея, здесь использует превосходную поддержку Python параметров, передаваемых по имени для реализации этого. Теперь, если я хочу считать данные из файла, я говорю:
obj.read(filename="blob.txt")
И считать его из строки, я говорю:
obj.read(str="\x34\x55")
Этот путь у пользователя есть просто отдельный метод звонить. Обработка его внутри, как Вы видели, не чрезмерно сложна
Вот что я сделал
Перемещено на Ramdisk:
Есть хитрый трюк, который позволяет перемещать папки (или файлы, если на то пошло) на виртуальный диск без единого изменения конфигурации.
Например:
cd C:\Dev\Apps
Xcopy jdk R:\jdk\ /s
ren jdk jdk-COPY
mklink /J jdk R:\jdk
Выбранный мной Ramdisk имеет возможность сохранять состояние при выключении системы (при условии, что сбоев нет).Я решил перемещать только относительно статические файлы на Ramdisk, поэтому после одной хорошей перезагрузки я всегда должен найти свой Ramdisk в том состоянии, в котором он мне нужен.
На машинах, предшествующих Vista, вы можете заменить mklink на junction из SysInternals.
Вы можете попробовать переместить рабочее пространство Eclipse на оперативный диск. Я почти уверен, что ни javac, ни компилятор Eclipse не используют какие-либо временные файлы, поэтому он идет прямо из файлов * .java в файлы * .class плюс копирование файлов ресурсов из исходного местоположения в целевую папку.
Другой альтернативой вы можете Хочу рассмотреть возможность использования твердотельного накопителя (SSD). Вы увидите значительное улучшение производительности во многих областях, которые интенсивно читают и записывают файлы с диска.