为所有Bokeh属性提供基类。
Bokeh属性通过将Python描述符对象提供给 HasProps 类。然后,这些描述符将属性访问委托回Bokeh属性类,该类处理验证、序列化和文档需求。
HasProps
这个 PropertyDescriptorFactory 类提供了两个方法 autocreate 和 make_descriptors 元类使用的 MetaHasProps 在类创建过程中,创建和安装与声明的属性相对应的必需描述符。
PropertyDescriptorFactory
autocreate
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属性实际上由两部分组成:熟悉的“属性”部分,例如 Int , String ,以及一个相关的Python描述符,它委托属性访问(例如。 range.start )属性实例。
Int
String
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
被调用 MetaHasProps 元类在仅使用属性类型分配属性时创建此描述符的新实例。例如:
class Foo(Model): bar = String # no parens used here
返回的列表 PropertyDescriptor 要安装在类上的实例,以便委托对此属性的属性访问。
PropertyDescriptor
name (str) -- 这些描述符用于的属性的名称
列表 [PropertyDescriptor]
返回的描述符由 MetaHasProps 元类并添加到 HasProps 类创建期间的子类。
亚类 PropertyDescriptorFactory 负责实现此功能以返回特定于其需求的描述符。