Я хотел бы обернуть класс модели без черт для использования с чертами Python. Моя цель - написать интерфейс на основе Traits для манипулирования «внешним» классом модели. Класс внешней модели сгенерирован SWIG, и поэтому я не могу добавить enthought.traits.api.HasTraits в качестве предка (думаю, хотя я могу ошибаться).
Моя лучшая попытка на данный момент -
from enthought.traits.api import HasStrictTraits, Property, Instance
class ExternalModel():
foo = 'foo'
class TraitsModel(HasStrictTraits):
_e = Instance(ExternalModel)
def __init__(self):
self._e = ExternalModel()
self.add_trait('foo', Property(lambda :getattr(self._e,'foo' ),
lambda attr:setattr(self._e,'foo',attr)))
, что заставляет основанный на Traits класс TraitsModel иметь изменяемое свойство, которое делегирует содержавшемуся экземпляру Non-Traits ExternalModel. Однако TraitsModel.trait_names () не сообщает 'foo' как распознанную черту.
Есть какие-нибудь предложения, как заставить TraitsModel сообщать о черте 'foo', которая связана с ExternalModel? enthought.traits.api.DelegatesTo, кажется, требует, чтобы целью был класс Traits (хотя я, возможно, не нашел правильный вызов, и это возможно).
Более подход MVC, скорее всего, заключается в том, чтобы иметь представление ExternalModel на основе черт. Мне не удалось выяснить, что у меня нет модели черт для представления на основе черт. Предложения в этом направлении также приветствуются.
Обновление Я выяснил, как получить HasTraits в качестве суперкласса ExternalModel, используя подход на http://agentzlerich.blogspot.com/2011_05_01_archive.html, и, похоже, это была пустая трата времени. По-видимому, вуду SWIG и Худу Черты не джайв. Оборачивание ExternalModel в TraitsModel, поскольку этот вопрос задает, кажется наилучшим маршрутом.