我定义了一些工作正常的实体;对于元编程问题。我现在需要反射(reflect)模型中定义的字段属性。
例如:
class Foo(Entity):
bar = OneToMany('Bar')
baz = ManyToMany('Baz')
设置了哪种类型的关系:“ManyToMany”、“OneToMany”甚至是普通的“Field”,以及关系目标?
是否有任何简单的方法来反射(reflect) Elixir 实体?
最佳答案
您可以像在 Python 中的任何地方一样在 Elixir 中进行自省(introspection)——使用 dir(Foo)
获取 class Foo
的所有属性名称,提取给定的属性用getattr(Foo, thename)
命名,用type(theattr)
或isinstance
等检查属性的类型。字符串'Bar'
作为属性传递给任何 Relationship
子类(包括 OneToMany
和 ManyToMany
)的构造函数的结果是作为 Relationship 子类的结果实例 r 的 r.of_kind
属性。
Python 标准库中的模块 inspect
可能是一种更友好的自省(introspection)方式,但 dir/getattr/isinstance &c 在许多情况下是完全可以接受的。
关于python - 灵药反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791150/