bokeh.core.property.descriptor_factory#

为所有 Bokeh 属性提供一个基类。

Bokeh 属性通过向 HasProps 类贡献 Python 描述符对象来工作。这些描述符随后将属性访问委托回 Bokeh 属性类,该类处理验证、序列化和文档需求。

PropertyDescriptorFactory 类提供了 make_descriptors 方法,该方法在类创建期间由元类 MetaHasProps 使用,以安装与声明的属性对应的描述符。

这种机制有助于使 Bokeh 更加用户友好。例如,DataSpec 属性在固定值和对列数据源列的引用之间进行协调。用户可以使用非常简单的语法,属性将自动正确地序列化和验证

from bokeh.models import Circle

c = Circle()

c.x = 10      # serializes to {'value': 10}

c.x = 'foo'   # serializes to {'field': 'foo'}

c.x = [1,2,3] # raises a ValueError validation exception

在 Bokeh 中有很多其他类似的例子。通过这种方式,用户可以简单自然地操作,而无需关注围绕验证、序列化和文档的底层细节。

注意

这些类构成了实现 Bokeh 模型和属性系统的非常底层的机制的一部分。这些类或其方法不太可能适用于任何标准用法,也不太可能适用于任何不直接在 Bokeh 自身基础设施上进行开发的人员。

class PropertyDescriptorFactory[source]#

所有 Bokeh 属性的基类。

一个 Bokeh 属性实际上由两部分组成:熟悉的“属性”部分,例如 Int, String 等,以及一个关联的 Python 描述符,它将属性访问(例如 range.start)委托给属性实例。

考虑以下类定义

from bokeh.model import Model
from bokeh.core.properties import Int

class SomeModel(Model):
    foo = Int(default=10)

然后我们可以观察到以下内容

>>> m = SomeModel()

# The class itself has had a descriptor for 'foo' installed
>>> getattr(SomeModel, 'foo')
<bokeh.core.property.descriptors.PropertyDescriptor at 0x1065ffb38>

# which is used when 'foo' is accessed on instances
>>> m.foo
10
make_descriptors(name: str) list[PropertyDescriptor[T]][source]#

返回要在类上安装的 PropertyDescriptor 实例列表,以便将属性访问委托给此属性。

参数:

name (str) – 这些描述符所针对的属性的名称

返回值:

list[PropertyDescriptor]

返回的描述符由 MetaHasProps 元类收集,并在类创建期间添加到 HasProps 子类。

PropertyDescriptorFactory 的子类负责实现此函数,以返回特定于其需求的描述符。