Важные изменения поведения между старыми и новыми классами стиля
Exception
(пример ниже) __slots__
Добавлено Это было упомянуто в других ответах, но здесь приведен конкретный пример разницы между классическим MRO и C3 MRO ( используется в новых классах стилей).
Вопрос заключается в порядке поиска атрибутов (включая методы и переменные-члены) при множественном наследовании.
Классические классы сначала делают глубину поиск слева направо. Остановка в первом матче. У них нет атрибута __mro__
.
class C: i = 0
class C1(C): pass
class C2(C): i = 2
class C12(C1, C2): pass
class C21(C2, C1): pass
assert C12().i == 0
assert C21().i == 2
try:
C12.__mro__
except AttributeError:
pass
else:
assert False
Классы нового стиля MRO сложнее синтезировать в одном английском предложении. Здесь подробно объясняется . Одним из его свойств является то, что базовый класс просматривается только после того, как все его производные классы были. У них есть атрибут __mro__
, который показывает порядок поиска.
class C(object): i = 0
class C1(C): pass
class C2(C): i = 2
class C12(C1, C2): pass
class C21(C2, C1): pass
assert C12().i == 2
assert C21().i == 2
assert C12.__mro__ == (C12, C1, C2, C, object)
assert C21.__mro__ == (C21, C2, C1, C, object)
Exception
Вокруг Python 2.5 можно было бы увеличить множество классов, в то время как Python 2.6 был удален. На Python 2.7.3:
# OK, old:
class Old: pass
try:
raise Old()
except Old:
pass
else:
assert False
# TypeError, new not derived from `Exception`.
class New(object): pass
try:
raise New()
except TypeError:
pass
else:
assert False
# OK, derived from `Exception`.
class New(Exception): pass
try:
raise New()
except New:
pass
else:
assert False
# `'str'` is a new style object, so you can't raise it:
try:
raise 'str'
except TypeError:
pass
else:
assert False
Я должен не согласиться с предложением RadiantCMS. В то время как это - хороший CMS для некоторых приложений (и мы используем его на работе), я не думаю, что это отвечает определенным требованиям (на основе моего опыта с помощью него, который по общему признанию не является всем этим обширным):
может быть подходящий CMS Ruby on Rails для Ваших требований, но я не думаю, что RadiantCMS - он.
Другой выбор Mephisto и другие, перечисленные в InfoQ. Я сделал прекрасный путем создания сверху плагин Goldberg, но поэтому я ожидал писать пользовательский код относительно классификации содержания.
, Как Вы знаете, любой CMS будет иметь конкуренцию и переменные требования. Это обычно объясняет, почему у всех и их дяди есть их собственный CMS.
Я услышал хорошие вещи [приблизительно 110] Коматозные . Если я вспоминаю правильно, Вы не , учитывая законченное приложение, в котором Вам дают несколько рычагов, где Вы добавляете свои настройки. Скорее Вы определяете несколько мест в своем приложении для направляющих, где Вам нужна функциональность CMS, и везде еще Вы сохраняете полный контроль над своим приложением.
, Если Вы хотите готовое решение, я должен буду согласиться с другими. Или RadiantCMS, Mephisto или Опечатка может быть хорошим выбором.
, Если хуже прибывает в худший, проверьте сравнение на Википедию . Это, вероятно, имеет намного больше CMSes, чем Вы когда-нибудь хотели услышать о, поскольку это не Ruby определенный:-)
Я должен согласиться с TimB. Я реализовал RadiantCMS, когда моя компания сначала начинала, и это работало отлично. Однако это фокусируется на том, чтобы быть простым установить и использовать и не является полнофункциональным CMS с рабочим процессом и таким.
Мы на самом деле переехали от Источника излучения несколько месяцев назад и являемся теперь очень счастливым использованием SilverStripe. SS сделал бы больше всего, если не все из того, что Вы запросили, к сожалению, он основан на PHP и не Ruby, таким образом, я не уверен, сколько справки, которая является.
Позже...
Richard
Я попробовал RadiantCMS и работавший с Drupal, я думаю, что RadiantCMS нигде не близок быть полной Системой управления контентом. Я также искал CMS как Drupal в RoR. Смотрите на это: http://joshhuckabee.com/drupal-and-ruby-rails
Также существует плагин Station. Я еще не использовал его, но он был размещен на RubyInside.
Коматозный довольно хорош, и он довольно ненавязчиво интегрируется в существующие сайты. Самое лучшее в Comatose - это то, что вы можете определять свои собственные текстовые фильтры. Например, чтобы использовать HAML на своих страницах, просто вставьте это в инициализатор:
# HAML Text Filter
TextFilters.define :haml, "HAML" do
require 'haml'
def render_text(text)
engine = Haml::Engine.new(text)
engine.render
end
end
Мы разрабатываем систему управления элементами и контентом с открытым исходным кодом, которая имеет довольно хорошую таксономию (неограниченное количество потомков категорий / глубина). Он предназначен для перечисления различных элементов (это могут быть страницы, сообщения в блогах, поставщики и т. Д.). Не уверен, что это подойдет вам, но вы можете попробовать демо по адресу:
http://hulihanapplications.com/projects/opal
Надеюсь, это поможет.