Elixir 反射
我定义了一些实体,它们运行得很好,主要是为了元编程的问题。现在我需要反映模型中定义的字段属性。
举个例子:
class Foo(Entity):
bar = OneToMany('Bar')
baz = ManyToMany('Baz')
比如说,关系的类型是什么?是“多对多”、“一对多”,还是简单的“字段”,还有关系的目标是什么?
有没有什么简单的方法可以反映Elixir实体呢?
1 个回答
4
在Elixir中,你可以像在Python中那样进行自省,也就是查看对象的属性。比如,你可以用 dir(Foo)
来获取 class Foo
的所有属性名称;如果你想根据属性名提取某个属性,可以用 getattr(Foo, thename)
;想检查某个属性的类型,可以用 type(theattr)
或者 isinstance
等等。你传给任何 Relationship
子类(比如 OneToMany
和 ManyToMany
)构造函数的字符串 'Bar'
,最终会成为这个关系子类实例 r 的 r.of_kind
属性。
在Python标准库中,inspect
模块可能是一个更友好的自省方式,但在很多情况下,使用 dir
、getattr
、isinstance
等也是完全可以的。