没有项目描述

autoprop的Python项目详细描述


https://img.shields.io/pypi/v/autoprop.svghttps://img.shields.io/pypi/pyversions/autoprop.svghttps://img.shields.io/travis/kalekundert/autoprop.svghttps://img.shields.io/coveralls/kalekundert/autoprop.svg

属性是python中允许访问器函数(即getter)的特性 和setters)伪装成常规属性。这使得 为需要缓存结果、延迟加载的类提供透明的api 数据、维护不变量或以任何其他方式对属性访问作出反应。

不幸的是,制作一个属性需要大量烦人的样板文件 代码。有几种方法可以做到这一点,但最常见和最简洁的是 要求您装饰两个函数(使用两个不同的装饰器)和 键入属性的名称三次:

class RegularProperty:

    @property
    def attr(self):
        return self._attr

    @attr.setter
    def attr(self, new_value):
        self._attr = new_value

autoprop模块通过在类中搜索 访问器方法并添加与任何此类方法对应的属性 发现。例如,下面的代码定义了与代码相同的属性 上图:

@autoprop
class AutoProperty:

    def get_attr(self):
        return self._attr

    def set_attr(self, new_value):
        self._attr = new_value

安装

autoprop在pypi上可用,因此您可以使用pip

pip install autoprop

用法

要使用autoprop,请导入autoprop模块并将其直接用作 类装饰符:

import autoprop

@autoprop
class Vector2D:

    def __init__(self, x, y):
        self._x = x
        self._y = y

    def get_x(self):
        return self._x

    def set_x(self, x):
        self._x = x

    def get_y(self):
        return self._y

    def set_y(self, y):
        self._y = y

decorator在类中搜索以get_开头的方法, set_,或del_,并使用它们创建属性。的名字 属性取自下划线后面的任何内容。例如, 方法get_x将用于生成名为x的属性。任何 每个方法允许getter、setter和deleter方法的组合 财产。

除了有正确的前缀外,还有两个条件方法必须满足 才能变成财产。首先是他们必须 所需参数的正确数目。getter和deleters不能有任何 必需的参数(除了self)。setter必须正好有一个必需的 参数(而不是self),这是要设置的值。默认值、变量和 关键字参数都可以;只有必需参数的数量才重要。

任何名称正确但参数错误的方法都是无声的 忽略。对于需要索引的getter来说,这很好。 即使这样的getter不能生成属性,autoprop允许它 要遵循与任何getter相同的命名约定,可以是:

@autoprop
class Vector2D:

    ...

    def get_coord(self, i):
        if i == 0: return self._x
        if i == 1: return self._y

    def set_coord(self, i, new_coord):
        if i == 0: self.x = new_coord
        if i == 1: self.y = new_coord

这样,类的用户总是可以期望找到名为 get_*set_*,以及与这些访问器对应的属性 不需要任何额外信息的基本属性。

第二个条件是属性必须有一个尚未命名的名称 正在使用中。这保证了显式添加到类中的任何内容都不会 覆盖,它使您能够自定义某些属性 如果你愿意的话。请注意,此标准不适用于 autoprop本身创建的属性。这就意味着如果 如果覆盖在超类中定义的一些访问器,将获得新的属性 引用被重写的访问器而不保留对 超类访问器。

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

推荐PyPI第三方库


热门话题
java IllegalStateException:在onBackPressed()上的onSaveInstanceState之后无法执行此操作;   java处理巨大的JSON响应   指向易趣时出现java fileNotFoundException。来自手机的com   java从数组填充GridView   两个三维向量之间的角度   java无法运行程序“cf”:错误=2,没有这样的文件或目录,错误=2   java如何使用DOCX4J从<a href到MS word bookmark/hyperlink创建内部超链接。使用DOCX4J为word文档中的TOC创建超链接   设计模式java的目标是什么。尼奥。文件CopyOption接口?   java从SQLiteDB获取选择信息?   Java引用错误   使用函数作为参数的java   tic-tac-toe似乎无法正确编译我的方法(Java)   使用泛型作为方法参数的java   java类'OIDCtenatConfig'无法解析,为什么?   如果Java中有两个同名的方法,如何告诉编译器我将使用什么方法?   java hazelcast flake id返回不同的数据   java如何按值对树集排序?   java为什么泛型类型信息在类文件中可见?   JavaSpringDataJPA+SpringProjections使用@Query(native和JPQL)为相关实体返回null