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