zjb.main.trait_types 源代码
import numpy as np
from traits.api import Array
IntVector = Array(dtype=int, shape=(None,))
FloatVector = Array(dtype=float, shape=(None,))
StrVector = Array(dtype=str, shape=(None,))
BoolVector = Array(dtype=bool, shape=(None,))
RequiredIntVector = Array(dtype=int, shape=(None,), required=True)
RequiredFloatVector = Array(dtype=float, shape=(None,), required=True)
RequiredStrVector = Array(dtype=str, shape=(None,), required=True)
RequiredBoolVector = Array(dtype=bool, shape=(None,), required=True)
[文档]
class ArrayLike(Array):
"""ArrayLike是一个numpy数组, 或支持__array__协议的类型, 或列表和元组.
相较于traits库提供的Array扩展了对支持`__array__`协议的类型的支持
对于支持`__array__`协议的类型(不包括ndarray,list和tuple), ArrayLike会
保存其原始对象(这是为了能利用Data的引用保存), 因此需要注意在使用ArrayLike
的值之前可能要调用`np.asarray`将数据转换为合适的ndarray类型。
"""
[文档]
def validate(self, object, name, value):
# 使用父类验证值
if hasattr(value, "__array__"):
# 提前调用asarray以绕过父类的限制
super().validate(object, name, np.asarray(value))
# 返回转换前的值
return value
else:
return super().validate(object, name, value)
[文档]
class CArrayLike(Array):
"""CArrayLike是一个numpy数组, 或支持__array__协议的类型, 或列表和元组
相比与ArrayLike, CArrayLike的值会被强制转换为ndarray类型, 而不会保留原始值
"""
[文档]
def validate(self, object, name, value):
if hasattr(value, "__array__"):
# 提前调用asarray已绕过父类的限制
value = np.asarray(value)
# 使用父类验证值并返回
return super().validate(object, name, value)