bokeh.core.property.descriptor_factory

为所有Bokeh属性提供基类。

Bokeh属性通过将Python描述符对象提供给 HasProps 类。然后,这些描述符将属性访问委托回Bokeh属性类,该类处理验证、序列化和文档需求。

这个 PropertyDescriptorFactory 类提供了两个方法 autocreatemake_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模型和属性系统的非常低级的机制的一部分。任何人都不可能直接使用这些基础设施来开发他们的任何类。

class PropertyDescriptorFactory[源代码]

所有Bokeh属性的基类。

Bokeh属性实际上由两部分组成:熟悉的“属性”部分,例如 IntString ,以及一个相关的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.BasicPropertyDescriptor at 0x1065ffb38>

# which is used when 'foo' is accessed on instances
>>> m.foo
10
classmethod autocreate()[源代码]

被调用 MetaHasProps 元类在仅使用属性类型分配属性时创建此描述符的新实例。例如:

class Foo(Model):

    bar = String   # no parens used here
make_descriptors(name)[源代码]

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

参数

name (str) -- 这些描述符用于的属性的名称

返回

列表 [PropertyDescriptor]

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

亚类 PropertyDescriptorFactory 负责实现此功能以返回特定于其需求的描述符。