自动插槽

(类来自 pyomo.common.autoslots)

class pyomo.common.autoslots.AutoSlots(name, bases, classdict)[source]

基础类:type

元类用于自动收集__slots__以进行通用序列化

__slots__ 是按照反向 MRO 顺序收集的。

任何需要特殊处理的字段都通过__autoslot_mappers__类属性指定的回调函数来处理。__autoslot_mappers__应该是一个dict,它将字段名称(无论是__slot__还是常规的__dict__条目)映射到一个具有以下签名的函数:

mapper(encode: bool, val: Any) -> Any

对象字段(或状态)的值被传递给映射器函数,函数返回修正后的值。__getstate__使用encode=True调用映射器,而__setstate__使用encode=False调用映射器。__autoslot_mappers__类属性被收集并按反向MRO顺序组合(因此,在更派生的类中的重复映射器将替换基类中定义的映射器)。

AutoSlots 定义了几个常见的映射函数,包括:

结果

这个元类将向类(以及所有派生类)添加一个__auto_slots__类属性。这个属性是一个_autoslot_info命名的4元组的实例:

(has_dict, slots, slot_mappers, field_mappers)

has_dict: bool

如果此类具有__dict__属性(除了__slots__之外还需要进行pickle操作),则为True

slots: tuple

该类声明的所有槽的元组(本地声明的任何槽与任何基类上声明的所有槽的联合)

slot_mappers: dict

slots中的索引映射到具有签名mapper(encode: bool, val: Any)的函数的字典,该函数可用于编码或解码该插槽

field_mappers: dict

__dict__中的字段名称映射到具有签名mapper(encode: bool, val: Any)的函数的字典,该函数可用于编码或解码该字段值。

__init__(name, bases, classdict)[source]

方法

__init__(name, bases, classdict)

collect_autoslots(cls)

encode_as_none(encode, val)

__autoslot_mappers__ 映射器,将用 None 替换字段

mro()

返回一个类型的方法解析顺序。

weakref_mapper(encode, val)

__autoslot_mappers__ 用于包含弱引用的字段的映射器

weakref_sequence_mapper(encode, val)

__autoslot_mappers__ 用于具有弱引用序列字段的映射器

成员文档

class Mixin[source]

基础类:object

混合类用于配置类层次结构以使用AutoSlots

继承这个类将设置__auto_slots__类属性的自动生成,并定义__deepcopy____getstate____setstate__的标准实现。

static encode_as_none(encode, val)[source]

__autoslot_mappers__ 映射器,将用 None 替换字段

此映射器将字段编码为None(无论当前字段值如何)。恢复状态时不会发生映射。

mro()

返回一个类型的方法解析顺序。

static weakref_mapper(encode, val)[source]

__autoslot_mappers__ 用于包含弱引用的字段的映射器

此映射器期望传递一个包含弱引用或None的字段。在生成状态时,它将弱引用解析为强引用,然后在恢复状态时将强引用转换回弱引用。

static weakref_sequence_mapper(encode, val)[source]

__autoslot_mappers__ 用于具有弱引用序列字段的映射器

此映射器期望传递一个包含弱引用序列的字段。在生成状态时,它将解析所有弱引用,然后在恢复状态时将硬引用转换回弱引用。