2009-04-26 4 views
3

Я определяю некоторые объекты, которые отлично работают; для метапрограмм. Теперь мне нужно отразить свойства поля, определенные в модели.Отражение эликсира

Например:

class Foo(Entity): 
     bar = OneToMany('Bar') 
     baz = ManyToMany('Baz') 

Какой тип отношений устанавливается: "ManyToMany", "OneToMany" или даже простой "поле", а целевая связь?

Есть ли простой способ отразить объекты Elixir?

ответ

4

Вы можете сделать самоанализ в эликсире, как если бы где-нибудь в Python - получить все имена атрибутов class Foo с dir(Foo), извлечь атрибут дал свое имя с getattr(Foo, thename), проверьте тип атрибута с type(theattr) или isinstance и т.д. Строка 'Bar', которую вы передаете как атрибут конструктору любого подкласса Relationship (включая OneToMany и ManyToMany), заканчивается как атрибут r.of_kind результирующего экземпляра r подкласса «Отношения».

Модуль inspect в стандартной библиотеке Python может быть более удобным способом сделать интроспекцию, но dir/getattr/isinstance & c вполне приемлемы во многих случаях.

Смежные вопросы