Bokeh属性を依頼するためのPython記述子を提供します。
巨漢. descriptor protocol インスタンス上のすべての属性へのアクセスを細粒度制御(“ドットを制御します”)を可能にします。Bokehは、記述子プロトコルを使用して、それらの値を自動的に検証および直列化することができ、複雑な文書の提供を容易にすることができる、使いやすい宣言的でタイプベースのクラス属性を提供する。
A Bokeh property really consist of two parts: a familiar "property" portion, such as Int, String, etc., as well as an associated Python descriptor that delegates attribute access to the property instance.
Int
String
例えば、同様の範囲のオブジェクトの非常に簡略化された定義は、:
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 メタクラス線は2つ start そして end 属性を追加する Float 財産です。そして,ユーザがこれらの属性にアクセスすると,ディスクリプタはすべてのGETとSET操作を依頼する. Float 財産です。
MetaHasProps
start
end
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 :
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'}
Bokeh全体には他にも似たような例が多い。このようにして、ユーザは、検証、直列化、および文書に関する下位の詳細に関心を持たずに、簡単かつ自然に操作することができる。
このモジュールはクラスを提供します PropertyDescriptor また,Bokeh属性をBokehモデルに付加するために利用可能な様々なサブクラスがある.
PropertyDescriptor
注釈
これらのクラスは,Bokehモデルと属性システムを実現する非常に下位の機器の一部を構成している.これらのクラスまたはそれらの方法のいずれも、任意の標準的な用法に適用される可能性はあまりなく、またはBokeh自身のインフラ上で直接開発された誰でもない。
BasicPropertyDescriptor
A PropertyDescriptor for basic Bokeh properties (e.g, Int, String, Float, etc.) with simple get/set and serialization behavior.
__init__
基本Bokeh属性のためのPropertyDescriptorを作成します。
name (str) -- この属性が用いる属性名
property (Property) -- 記述子の基本属性を作成する
__str__
の基本文字列表現形式 BasicPropertyDescriptor それがそうです。
代表が到着する. self.property.__str__
self.property.__str__
__get__
Pythonを実現するgetter descriptor protocol それがそうです。
例えば属性アクセスは Property それがそうです。クラス属性アクセスに対して、私たちは私たち自身に戻ります。
Property
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__
Pythonのsetterを実現する descriptor protocol それがそうです。
オプションのパラメータ setter 標準setterパラメータに追加されました。必要な場合は,明示的に呼び出すことで __set__ それがそうです。詳細については、以下を参照されたい。
setter
obj (HasProps) -- その上に新しい属性値のインスタンスを設定する
value (obj) -- 属性を新しい値に設定する
setter (ClientSession or ServerSession or None, optional) -- これはBokehアプリケーションの“ブーメラン”の更新を阻止するためのものです。(デフォルト値:なし)Bokehサーバアプリケーションのコンテキストでは、入力された属性更新は、更新を実行するセッションを使用して注釈される。この値は、更新によってトリガされた任意の後続の変更通知によって伝播される。セッションは、イベント設定器自身と比較し、自身からの任意の更新を抑制することができる。
__delete__
Pythonを実現するDeleter descriptor protocol それがそうです。
obj (HasProps) -- その中からこの属性のインスタンスを削除する
class_default
特定固定子タイプのデフォルト値の取得 HasProps これは,単一のインスタンスには利用できない.
HasProps
cls (class) -- デフォルト値のクラスを得る.
客体.
instance_default
特定のインスタンスに使用されるデフォルト値を取得します。
obj (HasProps) -- デフォルト値のインスタンスを得る.
set_from_json
JSON値に応じてこの属性の値を設定する.
この方法はまず
obj (HasProps) --
json (JSON-dict) --
models (seq[Model], optional) --
trigger_if_changed
この属性が設定された値に等しくない場合には、変更イベント通知を送信する old それがそうです。
old
obj (HasProps) -- その上に属性のオブジェクトを設定している.
old (obj) -- 比較する属性の上位値
has_ref
この属性が別のものを参照できるかどうか HasProps 例を挙げましょう
基本属性については、依頼してください has_ref 属性上の Property それがそうです。
readonly
この属性は読みのみであるかどうかである.
読み取り専用属性は、クライアントによってのみ修正される(すなわち、ブラウザ内のBokehJSによって修正される)。
serialized
オブジェクトを直列化する際に属性を直列化すべきかどうか.
たとえば,他の属性に既存の情報を繰り返す“仮想”や“便利”属性については偽である.
ColumnDataPropertyDescriptor
A PropertyDescriptor 運搬を専攻する ColumnData 財産です。
ColumnData
この方法はまず単独ですべてを抽出して除去する units フィールドは、関連する単位属性を直接設定する。そして残りの値をスーパークラスに渡します __set__ 処理を待つ。
units
DataSpecPropertyDescriptor
A PropertyDescriptor Bokehにとっては DataSpec フィールド/値辞書の属性に直列化する.
serializable_value
命名属性へのアクセスをBokehのpython記述子の基底クラスに依頼する Property 例を挙げましょう
フックのために命名されたBokeh属性は、記述子として作成されます。 HasProps 級友たち。
name (str) -- この記述子が用いた属性名
の基本文字列表現形式 PropertyDescriptor それがそうです。
サブクラスは,その特定のニーズを満たすためにこの機能を実現しなければならない.
NotImplementedError --
add_prop_descriptor_to_class
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
あるクラス計算のデフォルト値のために、どのインスタンスのトピックも無視します。
直列化すべき方式で値を生成する.
場合によっては,直列化された値は異なることが望ましい __get__ そのためには __get__ ユーザや開発者を容易にするために、値がより簡単に見えるようにする。
obj (HasProps) -- その直列化された属性を取得するオブジェクト
類JSON
obj -- (HasProps):属性値を設定するインスタンス
json -- (json-value):設定する属性の値
models (dict or None, optional) -- モデルIDからモデルへのマッピング(デフォルト値:なし)更新する属性も参照する値を持つ場合には,このオプションが必要となる.
これは容器の属性にとっては通常本物です Instance ちょっ.。
Instance
読み取り専用属性は、クライアントによってのみ修正される(すなわち、ブラウザ内のBokehJSによって修正される)。読み取り専用特性は、例えば、現在のレイアウト状態に応じた印刷領域の内部印刷サイズなど、ブラウザでしか計算できない数に非常に有用である。Pythonコールバックはこれらの値が有用であることを知ることができますが、それらは実際のブラウザでしか計算できません。
UnitsSpecPropertyDescriptor
A PropertyDecscriptor Bokehにとっては UnitsSpec 関連に役立つ属性 _units 属性は副作用とする.
PropertyDecscriptor
UnitsSpec
_units
units_property (Property) -- 単位情報を保存するための関連属性
この方法はまず単独ですべてを抽出して除去する units フィールドは、関連する単位属性を直接設定する。残りのJSONをスーパークラスに渡します set_from_json 処理を待つ。