参考#
引用是一种名称绑定。它将一个名称(例如foo
)绑定到一个对象上。
引用由用户手动创建,
作为UserSpace
的属性:
>>> space.foo = 1
当引用(Reference)作为UserSpace
的属性被创建时,
该名称会在与该UserSpace
关联的命名空间中变得可用。
子Cells
的公式(Formulas)会在该命名空间中进行求值,
因此出现在公式中的名称会指向该引用所绑定的对象。
继续上面的例子,
假设在同一个Space space
中定义了Cells baz
,
就像foo
那样:
>>> space.baz.formula
def baz():
return foo
foo
在 baz
定义中指向 1
:
>>> space.baz()
1
引用也可以作为Model
对象的属性创建。
这样的引用可以从Model中的任何Space访问。
假设model
是一个Model
对象,
并且是space
的父级:
>>> model.bar = "bar"
bar
在上面定义的内容也在 space
中定义了:
>>> space.bar
'bar'
并且 bar
可以从子级 Cells
的公式中引用 model
:
>>> def baz():
... return bar
>>> space.baz = baz
>>> space.baz.formula
def baz():
return bar
>>> space.baz()
'bar'
引用对象本身对用户是隐藏的,绑定对象始终通过名称被引用。要访问引用对象的属性,需使用ReferenceProxy
对象。
ReferenceProxy#
- class ReferenceProxy(impl)[源代码]#
代理接口以连接引用
引用对象不会直接暴露给用户,因此需要通过ReferenceProxy对象来与引用进行交互。可以通过
get_object()
函数创建并返回一个引用的代理对象,只需将引用的完整点分名称传递给name
参数,并向as_proxy
参数传递True
即可:>>> mx.get_object("Model1.Space1.foo", as_proxy=True)
Reference与Model、Space和Cells类共享其最终基类,以下是这些类共有的属性。
- parent#
该引用的父级。
- model#
该引用所属的Model。
另请参阅