В python имеется модуль inspect
.
Модуль проверки предоставляет несколько полезных функций, которые помогают получить информацию о живые объекты, такие как модули, классы, методы, функции, трассировки, объекты фрейма и объекты кода. Например, он может помочь вам изучить содержимое класса, получить исходный код метода, извлечь и форматировать список аргументов для функции или получить всю необходимую информацию для отображения подробной трассировки.
Пример:
>>> import os >>> import inspect >>> inspect.getfile(os) '/usr/lib64/python2.7/os.pyc' >>> inspect.getfile(inspect) '/usr/lib64/python2.7/inspect.pyc' >>> os.path.dirname(inspect.getfile(inspect)) '/usr/lib64/python2.7'
В основном, когда это - четко определенное, фиксированное множество значений, которые известны во время компиляции.
можно использовать перечисление в качестве набора очень легко (с EnumSet), и он позволяет Вам определять поведение, ссылаться на элементы по имени, включать их и т.д.
Когда элементы известны впереди и не изменятся, перечисление является соответствующим.
, Если элементы могут измениться во время времени выполнения, используйте Набор.
Я не гуру Java, но мое предположение должно использовать перечисление, когда Вы хотите к gurantee определенный пул значений, и использовать набор, когда Вы хотите к gurantee уникальности. Пример состоял бы в том, чтобы перечислить дни недели (наклон имеют "funday") и иметь набор SSN (универсальный пример, который я знаю!)
Большие ответы - я попытаюсь подвести итог, если только для моей собственной ссылки - отчасти будет похоже, что необходимо использовать перечисления в двух ситуациях:
Все значения, в которых Вы нуждаетесь, известны во время компиляции, и или или оба из следующего:
С Набором по ссылкам перечисления, которые дал Jon, можно извлечь пользу из перечислимой производительности и безопасности как деталь реализации, не включая его в общий замысел.
Сообщество wiki'd, отредактируйте и улучшитесь, если Вы хотите!
В некоторых ситуациях Ваш бизнес требует создания новых объектов, но в то же время бизнес-логики на основе некоторых фиксированных объектов. Для фиксированных Вы хотите перечисление, новые, очевидно, требуют некоторого набора/дб.
я видел проекты использовать набор для этого вида объектов, приводя к бизнес-логике в зависимости от данных, которые могут быть удалены пользователем. Никогда не делайте это, но действительно создайте отдельное перечисление для фиксированных и набор для других, столь же требуемых.
другое решение состоит в том, чтобы использовать набор с неизменными объектами для фиксированных значений. Эти объекты могли также находиться в дб, но иметь дополнительный флаг, таким образом, пользователи не могут обновить / удаляют его.