python对象的数字特征

numtraits的Python项目详细描述


Travis Build StatusCoverage Status

请注意:此包是实验性的,可能仍会看到一些 对api的更改。如果你对改进api有什么建议, 请打开一个问题!

关于

这个简单的模块定义了一个描述符类,可以用来定义 类和上的数值性质(标量和n维数组) 提供一种验证方法。因此,与其写东西 例如:

classSphere(object):@propertydefradius(self):returnself._radius@radius.setterdefradius(self,value):ifvalue<=0:raiseValueError("Value should be strictly positive")ifnotnp.isscalar(value):raiseTypeError("Value should be a scalar")ifnotnp.isreal(value):raiseTypeError("Value should be numerical")self._radius=value

对于要定义的每个属性,您只需执行以下操作:

fromnumtraitsimportNumericalTraitfromtraitletsimportHasTraitsclassSphere(HasTraits):radius=NumericalTrait(domain='strictly-positive',ndim=0)

NumericalTrait类是在 traitlets模块。任何类别 使用NumericalTrait定义属性必须traitlets.HasTraits类派生。

还包括用于检查尺寸和形状的支架 数组(包括将元组和列表转换为数组 以及检查 astropy.unitspint,和 quantities单元框架。

安装

这个包与Python2.7、3.3和更高版本兼容,并且需要 numpytraitlets。如果你是 有兴趣进行单元验证,您还需要 astropypint,或 quantities,取决于 你通常使用哪个单元框架。

要安装,您可以执行以下操作:

pip install numtraits

如果需要,还可以将numtraits.py捆绑到包中 避免使用外部依赖项,但请确保 文件中的版权和许可证。

使用

若要在类上创建自验证的数值属性,请使用 NumericalTrait类:

fromtraitletsimportHasTraitsfromnumtraitsimportNumericalTraitclassSphere(HasTraits):radius=NumericalTrait(domain='strictly-positive',ndim=0)position=NumericalTrait(shape=(3,))

设置属性时,将验证它:

>>>s=Sphere()>>>s.radius=1.>>>s.radius=-3...TraitError:radiusshouldbestrictlypositive>>>s.radius=[1,2]...TraitError:radiusshouldbeascalarvalue>>>s.position=(1,2,3)>>>s.position=3...TraitError:positionshouldbea1-dsequence>>>s.position=(1,2,3,4)...TraitError:positionhasincorrectlength(expected3butfound4)

NumericalTrait的以下参数可用:

  • ndim:将值限制为具有此维数的数组
  • shape:将值限制为具有此形状的数组。如果 指定的,ndim不需要给定。
  • domain:将值限制为特定域-可以是一个 共positivestrictly-positivenegativestrictly-negative,或表示一系列值的元组。
  • default:要返回的默认值(如果未指定)(默认值 到None
  • convertible_to:将值限制为具有 可转换为一组特定的单元(参见下面的章节)

注意元组和列表将自动转换为numpy 数组,如果它们被认为是有效的。

物理单位

虽然NumericalTrait可以用于普通标量和numpy数组, 它也可以用于标量和具有相关单位的数组, 支持三种常用的单元处理单元: astropy.unitspint,和 quantities

NumericalTrait限制为具有特定类型 单位,使用convertible_to选项。此选项从 这三个单元包中的任何一个,并将确保传递的任何值 单位等于(但不一定等于)指定的 convertible_to选项。

如果传递给convertible_to的单位是 astropy.units单位,然后是任意 传递给属性的值应该是 astropy.units数量。如果 传递给convertible_to的单元是 pint单位,则任何传递的数量 属性应该是pint 财产。最后,如果传递给convertible_to的单元是 quantities单位,然后是任意 传递给属性的数量应为 quantities数量。

astropy.units数量示例

下面的示例演示如何将radius属性限制为 成为astropy.units数量 长度单位:

fromastropyimportunitsasuclassSphere(HasTraits):radius=NumericalTrait(convertible_to=u.m)

然后将执行以下操作:

>>>s=Sphere()>>>s.radius=3.*u.m>>>s.radius=4.*u.cm>>>s.radius=4.*u.s...TraitError:radiusshouldbeinunitsconvertibletom

品脱数量示例

下面的示例演示如何将radius属性限制为 是一个pint数量,单位为 长度:

frompintimportUnitRegistryureg=UnitRegistry()classSphere(HasTraits):radius=NumericalTrait(convertible_to=ureg.m)

然后将执行以下操作:

>>>s=Sphere()>>>s.radius=3.*ureg.m>>>s.radius=4.*ureg.cm>>>s.radius=4.*ureg.s...TraitError:radiusshouldbeinunitsconvertibletometer

数量数量示例

最后,下面的示例演示如何限制radius 属性为quantities 数量(单位:Le)长度:

importquantitiesaspqclassSphere(HasTraits):radius=NumericalTrait(convertible_to=pq.m)

然后将执行以下操作:

>>>s=Sphere()>>>s.radius=3.*pq.m>>>s.radius=4.*pq.cm>>>s.radius=4.*pq.s...TraitError:radiusshouldbeinunitsconvertibletom

计划支持

  • 属性的链接(例如,属性应该具有相同的 其他尺寸)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX 11可编辑组合框引发IndexOutOfBoundsException   java选择数组中的数组元素   java我从来没有找到创建2D ArrayList的正确方法   java JPA查找orderById的顶部数据,并按字符串过滤Id   使用java在ejabberd中进行xmpp外部身份验证   从ajax调用向java传递点运算符   java如何使用ReadWriteLock   使用Spring控制器和jQueryAjax的java重定向   java使JFrame中的JPanel可滚动   java如何用多个。jar库?   java EditText在RecyclerView中失去了对滚动的关注   java为什么我们必须扩展Servlet或GenericServlet或HttpServlet来创建Servlet应用程序?如果不扩展,我们可以开发Servlet应用程序吗?   使用递归java查找数组中的最大值   具有不同字段数的html表单的java域传输对象   java文本视图扩展;不支持操作异常   java如何使用iText的HTMLWorker类将多语言HTML字符串呈现为PDF