Эликсир отражения - PullRequest
3 голосов
/ 26 апреля 2009

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

Например:

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

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

Есть ли простой способ отразить сущности Эликсира?

1 Ответ

4 голосов
/ 26 апреля 2009

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

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

...