bokeh.core.property.descriptors

为委托给Bokeh属性提供Python描述符。

Python descriptor protocol 允许对实例上的所有属性访问进行细粒度控制(“您控制点”)。Bokeh使用描述符协议提供易于使用的、声明性的、基于类型的类属性,这些属性可以自动验证和序列化它们的值,并帮助提供复杂的文档。

Bokeh属性实际上由两部分组成:一个熟悉的“属性”部分,例如 IntString ,以及相关联的Python描述符,该描述符将属性访问委托给属性实例。

例如,范围类对象的一个非常简化的定义可能是:

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

class Range(Model):
    start = Float(help="start point")
    end   = Float(help="end point")

创建此类时 MetaHasProps 元类连接了两个 startend 属性 Float 财产。然后,当用户访问这些属性时,描述符将所有get和set操作委托给 Float 财产。

rng = Range()

# The descriptor __set__ method delegates to Float, which can validate
# the value 10.3 as a valid floating point value
rng.start = 10.3

# But can raise a validation exception if an attempt to set to a list
# is made
rng.end = [1,2,3]   # ValueError !

更复杂的属性,如 DataSpec 它的子类可以控制如何序列化值。考虑这个例子 Circle 字形及其 x 属性是 NumberSpec

from bokeh.models import Circle

c = Circle()

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

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

在博基还有很多类似的例子。通过这种方式,用户可以简单而自然地进行操作,而不必关心有关验证、序列化和文档的低级细节。

本模块提供 PropertyDescriptor 以及可用于将Bokeh属性附加到Bokeh模型的各种子类。

注解

这些类构成实现Bokeh模型和属性系统的非常低级的机制的一部分。任何人都不可能直接使用这些基础设施来开发他们的任何类。

class BasicPropertyDescriptor(name, property)[源代码]

A PropertyDescriptor 对于基本的Bokeh特性(例如, IntStringFloat ,等等)具有简单的get/set和序列化行为。

__init__(name, property)[源代码]

为基本Bokeh属性创建PropertyDescriptor。

参数
  • name (str) -- 此属性用于的属性名称

  • property (Property) -- 要为其创建描述符的基本属性

__str__()[源代码]

基本字符串表示 BasicPropertyDescriptor .

委托给 self.property.__str__

__get__(obj, owner)[源代码]

实现Python的getter descriptor protocol .

例如属性访问,我们将委托给 Property . 对于类属性访问,我们返回self。

参数
  • obj (HasProps or None) -- 要在其上设置新属性值的实例(例如实例属性访问),或无(用于类属性访问)

  • owner (obj) -- 要将属性设置为的新值

返回

没有

实际案例

>>> from bokeh.models import Range1d

>>> r = Range1d(start=10, end=20)

# instance attribute access, returns the property value
>>> r.start
10

# class attribute access, returns the property descriptor
>>> Range1d.start
<bokeh.core.property.descriptors.BasicPropertyDescriptor at 0x1148b3390>
__set__(obj, value, setter=None)[源代码]

为Python实现setter descriptor protocol .

注解

可选的论点 setter 已添加到标准制定器参数中。当需要时,应该通过显式调用 __set__ . 详见下文。

参数
  • obj (HasProps) -- 要对其设置新属性值的实例

  • value (obj) -- 要将属性设置为的新值

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

__delete__(obj)[源代码]

实现Python的deleter descriptor protocol .

参数

obj (HasProps) -- 要从中删除此属性的实例

class_default(cls)[源代码]

获取特定子类型的默认值 HasProps ,它不能用于单个实例。

参数

cls (class) -- 要获取其默认值的类。

返回

对象

instance_default(obj)[源代码]

获取将用于特定实例的默认值。

参数

obj (HasProps) -- 要获取其默认值的实例。

返回

对象

set_from_json(obj, json, models=None, setter=None)[源代码]

从JSON值设置此属性的值。

先用这个方法

参数
  • obj (HasProps) --

  • json (JSON-dict) --

  • models (seq[Model], optional) --

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

trigger_if_changed(obj, old)[源代码]

如果属性设置为不等于的值,则发送更改事件通知 old .

参数
  • obj (HasProps) -- 正在设置属性的对象。

  • old (obj) -- 要比较的属性的上一个值

返回

没有

property has_ref

另一个属性是否可以引用 HasProps 实例。

委托给基本属性 has_ref 属性 Property .

property readonly

此属性是否为只读。

只读属性只能由客户端(即浏览器中的BokehJS)修改。

property serialized

序列化对象时是否应序列化属性。

例如,对于“虚拟”或“便利”属性,如果该属性复制了其他属性中已有的信息,则该属性将为False。

class ColumnDataPropertyDescriptor(name, property)[源代码]

A PropertyDescriptor 专门处理 ColumnData 性质。

__set__(obj, value, setter=None)[源代码]

为Python实现setter descriptor protocol .

此方法首先分别提取和移除任何 units 字段,并直接设置关联的units属性。剩余的值随后传递给超类 __set__ 待处理。

注解

可选的论点 setter 已添加到标准制定器参数中。当需要时,应该通过显式调用 __set__ . 详见下文。

参数
  • obj (HasProps) -- 要对其设置新属性值的实例

  • value (obj) -- 要将属性设置为的新值

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

class DataSpecPropertyDescriptor(name, property)[源代码]

A PropertyDescriptor 为了博克 DataSpec 序列化到字段/值字典的属性。

serializable_value(obj)[源代码]
set_from_json(obj, json, models=None, setter=None)[源代码]

从JSON值设置此属性的值。

先用这个方法

参数
  • obj (HasProps) --

  • json (JSON-dict) --

  • models (seq[Model], optional) --

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

class PropertyDescriptor(name)[源代码]

python描述符的基类,它将对命名属性的访问委托给Bokeh Property 实例。

__init__(name)[源代码]

创建一个描述符,用于将命名的Bokeh属性作为 HasProps 班级。

参数

name (str) -- 此描述符用于的属性名

__str__()[源代码]

基本字符串表示 PropertyDescriptor .

子类必须实现这一点以满足它们的特定需求。

__get__(obj, owner)[源代码]

实现Python的getter descriptor protocol .

参数
  • obj (HasProps or None) -- 要在其上设置新属性值的实例(例如实例属性访问),或无(用于类属性访问)

  • owner (obj) -- 要将属性设置为的新值

返回

没有

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

__set__(obj, value, setter=None)[源代码]

为Python实现setter descriptor protocol .

注解

可选的论点 setter 已添加到标准制定器参数中。当需要时,应该通过显式调用 __set__ . 详见下文。

参数
  • obj (HasProps) -- 要对其设置新属性值的实例

  • value (obj) -- 要将属性设置为的新值

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

__delete__(obj)[源代码]

实现Python的deleter descriptor protocol .

参数

obj (HasProps) -- 要从中删除此属性的实例

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

add_prop_descriptor_to_class(class_name, new_class_attrs, names_with_refs, container_names, dataspecs)[源代码]

MetaHasProps 在类创建期间调用此函数,因为它迭代要添加的属性,以更新其新属性的注册表。

传入的参数是可变的,此函数将相应地更新它们。

参数
  • class_name (str) -- 添加此描述符的类的名称

  • new_class_attrs (dict[str, PropertyDescriptor]) -- 将属性名映射到此函数将更新的PropertyDescriptor

  • names_with_refs (set[str]) -- 此函数将更新的还具有引用的属性的所有属性名称的集合

  • container_names (set[str]) -- 此函数将更新的作为容器属性的属性的所有属性名称的集合

  • dataspecs (dict[str, PropertyDescriptor]) -- 此函数将更新的DataSpec属性的属性名映射到PropertyDescriptor

返回

没有

class_default(cls)[源代码]

为特定类计算的默认值,忽略任何每个实例的主题化。

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

serializable_value(obj)[源代码]

生成值,因为它应该序列化。

有时,序列化值与 __get__ 为了 __get__ 为方便用户或开发人员而简化。

参数

obj (HasProps) -- 要获取其序列化属性的对象

返回

类似JSON

set_from_json(obj, json, models=None, setter=None)[源代码]

从JSON值设置此属性的值。

参数
  • obj -- (HasProps):要设置属性值的实例

  • json -- (JSON value):要设置为的属性的值

  • models (dict or None, optional) -- 模型ID到模型的映射(默认值:无)在要更新的属性也有引用的值的情况下,需要这样做。

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

trigger_if_changed(obj, old)[源代码]

如果属性设置为不等于的值,则发送更改事件通知 old .

参数
  • obj (HasProps) -- 正在设置属性的对象。

  • old (obj) -- 要比较的属性的上一个值

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

property has_ref

另一个属性是否可以引用 HasProps 实例。

对于容器属性,这通常是正确的, Instance 等。

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

property readonly

此属性是否为只读。

只读属性只能由客户端修改(即,由BokehJS在浏览器中)。只读特性对于源于或只能在浏览器中计算的数量非常有用,例如,打印区域的“内部”打印标注(取决于当前布局状态)。Python回调能够知道这些值是很有用的,但只能在实际浏览器中计算它们。

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

property serialized

序列化对象时是否应序列化属性。

例如,对于“虚拟”或“便利”属性,如果该属性复制了其他属性中已有的信息,则该属性将为False。

引发

NotImplementedError --

子类必须实现这一点以满足它们的特定需求。

class UnitsSpecPropertyDescriptor(name, property, units_property)[源代码]

A PropertyDecscriptor 为了博克 UnitsSpec 有助于关联的属性 _units 属性自动作为副作用。

__init__(name, property, units_property)[源代码]
参数
  • name (str) -- 此属性用于的属性名称

  • property (Property) -- 要为其创建描述符的基本属性

  • units_property (Property) -- 保存单位信息的关联属性

__set__(obj, value, setter=None)[源代码]

为Python实现setter descriptor protocol .

此方法首先分别提取和移除任何 units 字段,并直接设置关联的units属性。剩余的值随后传递给超类 __set__ 待处理。

注解

可选的论点 setter 已添加到标准制定器参数中。当需要时,应该通过显式调用 __set__ . 详见下文。

参数
  • obj (HasProps) -- 要对其设置新属性值的实例

  • value (obj) -- 要将属性设置为的新值

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有

set_from_json(obj, json, models=None, setter=None)[源代码]

从JSON值设置此属性的值。

此方法首先分别提取和移除任何 units JSON中的字段,并直接设置关联的units属性。然后,剩余的JSON传递给超类 set_from_json 待处理。

参数
  • obj -- (HasProps):要设置属性值的实例

  • json -- (JSON value):要设置为的属性的值

  • models (dict or None, optional) -- 模型ID到模型的映射(默认值:无)在要更新的属性也有引用的值的情况下,需要这样做。

  • setter (ClientSession or ServerSession or None, optional) -- 这是用来防止“飞镖”更新到博克应用程序。(默认值:无)在Bokeh服务器应用程序的上下文中,对属性的传入更新将使用正在进行更新的会话进行注释。此值通过更新触发的任何后续更改通知传播。会话可以将事件设置程序与其自身进行比较,并禁止任何源自自身的更新。

返回

没有