【问题标题】:Elixir reflection灵药反射
【发布时间】:2010-10-21 22:14:33
【问题描述】:
我定义了一些可以正常工作的实体;对于元编程问题。我现在需要反映模型中定义的字段属性。
例如:
class Foo(Entity):
bar = OneToMany('Bar')
baz = ManyToMany('Baz')
设置了哪种类型的关系:“ManyToMany”、“OneToMany”甚至是普通的“Field”,以及关系目标?
是否有任何简单的方法来反映 Elixir 实体?
【问题讨论】:
标签:
python
sqlalchemy
pylons
python-elixir
【解决方案1】:
你可以像在 Python 中的任何地方一样在 Elixir 中进行自省——使用 dir(Foo) 获取 class Foo 的所有属性名称,使用 getattr(Foo, thename) 提取属性名称,使用 @ 检查属性的类型987654324@ 或isinstance 等。作为属性传递给任何Relationship 子类(包括OneToMany 和ManyToMany)的构造函数的字符串'Bar' 最终作为结果的r.of_kind 属性关系子类的实例 r。
Python 标准库中的模块inspect 可能是一种更友好的自省方式,但在许多情况下 dir / getattr / isinstance &c 是完全可以接受的。