bokeh.core.property.descriptors#
为委托给 Bokeh 属性提供 Python 描述符。
Python 描述符协议允许对实例上的所有属性访问进行细粒度控制(“您控制点”)。Bokeh 使用描述符协议来提供易于使用、声明式、基于类型的
类属性,这些属性可以自动验证和序列化它们的值,并帮助提供复杂的文档。
Bokeh 属性实际上由两部分组成:熟悉的“属性”部分,例如 Int
、String
等,以及关联的 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
元类将 start
和 end
属性都连接到 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
字形及其作为 NumberSpec
的 x
属性的示例:
from bokeh.models import Circle
c = Circle()
c.x = 10 # serializes to {'value': 10}
c.x = 'foo' # serializes to {'field': 'foo'}
在整个 Bokeh 中还有许多像这样的示例。通过这种方式,用户可以简单自然地操作,而无需关心围绕验证、序列化和文档的底层细节。
此模块提供了类 PropertyDescriptor
和各种子类,这些子类可用于将 Bokeh 属性附加到 Bokeh 模型。
注意
这些类构成了实现 Bokeh 模型和属性系统的非常底层的机制的一部分。这些类或其方法不太可能适用于任何标准用法或任何不直接在 Bokeh 自己的基础设施上进行开发的人。
- class ColumnDataPropertyDescriptor(name: str, property: Property[T])[源代码]#
专门用于处理
ColumnData
属性的PropertyDescriptor
。- __set__(obj, value, *, setter=None)[源代码]#
实现 Python 描述符协议的 setter。
此方法首先分别提取并删除 JSON 中的任何
units
字段,并直接设置关联的 units 属性。然后将剩余的值传递给超类__set__
进行处理。注意
可选参数
setter
已添加到标准 setter 参数中。如果需要,此值应通过显式调用__set__
来提供。有关更多信息,请参见下文。- 参数:
obj (HasProps) – 要在其上设置新属性值的实例
value (obj) – 要将属性设置为的新值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None
- class DataSpecPropertyDescriptor(name: str, property: Property[T])[源代码]#
PropertyDescriptor
用于 BokehDataSpec
属性,这些属性序列化为字段/值字典。- set_from_json(obj: HasProps, value: Any, *, setter: Setter | None = None)[源代码]#
从 JSON 值设置此属性的值。
此方法首先
- 参数:
obj (HasProps)
value (JSON 字典)
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None
- class PropertyDescriptor(name: str, property: Property[T])[源代码]#
具有简单 get/set 和序列化行为的 Bokeh 属性的基类。
- __get__(obj: HasProps | None, owner: type[HasProps] | None) T [源代码]#
实现 Python 描述符协议的 getter。
对于实例属性访问,我们委托给
Property
。对于类属性访问,我们返回自身。- 参数:
obj (HasProps 或 None) – 要在其上设置新属性值的实例(对于实例属性访问),或 None(对于类属性访问)
owner (obj) – 要将属性设置为的新值
- 返回:
None
示例
>>> 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.PropertyDescriptor at 0x1148b3390>
- __set__(obj: HasProps, value: T, *, setter: Setter | None = None) None [源代码]#
实现 Python 描述符协议的 setter。
注意
可选参数
setter
已添加到标准 setter 参数中。如果需要,此值应通过显式调用__set__
来提供。有关更多信息,请参见下文。- 参数:
obj (HasProps) – 要在其上设置新属性值的实例
value (obj) – 要将属性设置为的新值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None
- class_default(cls: type[HasProps], *, no_eval: bool = False)[源代码]#
获取
HasProps
的特定子类型的默认值,该默认值可能不用于单个实例。- 参数:
cls (class) – 要获取默认值的类。
no_eval (bool, 可选) – 是否评估默认值的可调用对象(默认值:False)
- 返回:
object
- get_value(obj: HasProps) Any [源代码]#
生成用于序列化的值。
有时,为了使
__get__
值对用户或开发人员更方便,期望序列化的值与__get__
不同。- 参数:
obj (HasProps) – 要获取序列化属性的对象
- 返回:
Any
- set_from_json(obj: HasProps, value: Any, *, setter: Setter | None = None)[源代码]#
从 JSON 值设置此属性的值。
- 参数:
obj – (HasProps) : 要在其上设置属性值的实例
value – (JSON 值) : 要设置为属性的值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None
- class UnitsSpecPropertyDescriptor(name, property, units_property)[source]#
用于 Bokeh
UnitsSpec
属性的PropertyDescriptor
,这些属性会自动贡献关联的_units
属性作为副作用。- __set__(obj, value, *, setter=None)[source]#
实现 Python 描述符协议的 setter。
此方法首先分别提取并删除 JSON 中的任何
units
字段,并直接设置关联的 units 属性。然后将剩余的值传递给超类__set__
进行处理。注意
可选参数
setter
已添加到标准 setter 参数中。如果需要,此值应通过显式调用__set__
来提供。有关更多信息,请参见下文。- 参数:
obj (HasProps) – 要在其上设置新属性值的实例
value (obj) – 要将属性设置为的新值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None
- set_from_json(obj, json, *, models=None, setter=None)[source]#
从 JSON 值设置此属性的值。
此方法首先单独提取并移除 JSON 中的任何
units
字段,并直接设置关联的 units 属性。然后,将剩余的 JSON 传递给超类set_from_json
以进行处理。- 参数:
obj – (HasProps) : 要在其上设置属性值的实例
json – (JSON 值) : 要设置为属性的值
models (dict 或 None,可选) –
模型 ID 到模型的映射(默认值:None)
在要更新的属性也具有引用值的情况下,这是必需的。
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。(默认值:None)
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值将通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并抑制任何源自自身的更新。
- 返回:
None