问题标签 [python-descriptors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

python - 对非类属性使用 Python 的 __get__ 描述符

使用__get__描述符我想实现这样的目标:

事实证明,__get__只有当实例是某个其他类的类属性时才会调用该描述符,而当实例是独立对象(未绑定到任何类属性)Wrapper时,它不会被调用。Wrapper

有没有办法让__get__描述符在非类属性中工作?

主要目标是实现包装器,它在使用时就像包装的值一样(我知道乍一看这听起来没什么用,但在某些用例中这会有所帮助)。那么也许有其他方法可以在不使用__get__描述符的情况下实现这一点?

0 投票
1 回答
823 浏览

python - Python - 我的班级没有调用 __get__

这是我的代码:

我想要的是返回my_ret_value,但我得到的是:

我已经阅读了Python Descriptors 示例,如果我更改我的代码以遵循它的工作原理 - 但为什么我不能在我的班级上按原样做呢?还有其他方法吗?

编辑 :

感谢您的意见,我没有很好地理解它。能__repr__解决我的问题吗?

我想要的是我将一个字符串值更改为一个对象,我想将此对象视为一个字符串,并具有一些额外的属性。

0 投票
2 回答
1598 浏览

python - 带有描述符的类型提示

此拉取请求中,似乎添加了对描述符的类型提示支持。

但是,似乎从未发布过最终确定的“正确”用法示例,也似乎从未将任何文档添加到typing模块Mypy中。

看起来正确的用法是这样

这似乎合乎逻辑,但我不知道这是否真的是正确的做事方式。

有这方面的任何文件吗?还是在合并的版本上实际运行的完整示例?

0 投票
3 回答
80 浏览

python - 需要有关 python 描述符功能的帮助

我正在尝试使用 python 描述符解决问题。代码如下

预期的 O/P 是

但我明白了

请帮助我应该在哪里更改或者是否有其他更好的方法。

0 投票
3 回答
636 浏览

python - Python 描述符中实例和所有者的目的是什么?

我正在尝试理解 Python 中的描述符。我似乎无法理解的是描述符方法中的实例和所有者是什么:

现在我已经阅读了文档说:

所有者始终是所有者类,而实例是通过所有者访问属性的实例,或者当通过所有者访问属性时为 None。

不幸的是,我无法理解这意味着什么。所有者是否指类本身?类对象?那么实例传递给它的目的是什么?

0 投票
1 回答
328 浏览

python - 嵌套类装饰器也是描述符类

我有一种情况,我需要使用下面的嵌套装饰器,

装饰器的实现如下所示,

问题是没有调用 deco2 类的描述符方法,我需要调用它。当我做类似下面的事情时,

实际

预期的

我需要有单独的装饰器是有原因的。考虑到这一点,我怎么能做到这一点?另外,如果有人可以解释为什么 deco2. get没有被调用,那太好了!谢谢。

使用 Python 3.7.x

0 投票
1 回答
85 浏览

python - 如何冻结多个相关类方法的一些参数

什么是“最好”的方法来获取使用一些常见参数名称(假设意味着相同的东西)的函数集合,并创建一个包含这些函数的对象,但一些关键参数值是固定的,或者至少它们的默认值是固定的.

如果我要使用一组函数来处理由一组属性定义的某些特定数据,我通常会使用一个类,提供必须在__init__.

但有时从函数开始更有意义,或者您别无选择,因为您使用的是其他人的代码。然而,您希望方便地修复某些参数的值,并且在操作时不必重复指定这些值,这很无聊并且容易出错。它是 DRY 的一种形式。

如果您有一个功能,您只需使用functools.partial. 但是,当您拥有大量功能时,有什么好的方法可以做到这一点。

这是我如何使用一个参数的示例:

这是一个使用所有具有“路径”参数(我们将修复到本地主文件夹)的 os.path 函数的示例。

给我 ['exists', 'isfile', '_get_sep', 'islink', 'lexists', 'ismount', 'expanduser', 'expandvars', 'normpath', 'abspath', '_joinrealpath', 'relpath']

这并不完全令人满意,因为(1)根据我要修复的参数的位置,我将被迫使用仅关键字调用,(2)我想要看起来更像普通类的东西,带有self 具有我固定的属性,随后由函数使用,(3)它只是一个参数示例。

我猜巧妙地使用装饰器和/或描述符可以做一些好事。

0 投票
2 回答
125 浏览

python - 组成:为什么当“包含的实例”改变时,“容器实例”的属性没有更新?

我想更好地理解容器对象属性和包含对象属性之间的关系。

我想了解这个例子的输出:

我创建了一个类 Car 和一个类 Tire。
轮胎还有一个属性 age 应该“指向”名为 bmw 的汽车实例的属性。因此,我认为通过更改 bmw 实例的属性,倍耐力属性 age 也应该更新,因为它引用了相同的变量。从示例中可以看出,情况并非如此。

我该怎么做才能真正更新它?我计划多次使用作文,所以在最后一堂课中使用它是非常不切实际的

finalInstance.age = previousInstances.tire.car.age。

我希望这个输出:

但我得到的是:

任何人都可以帮我找到一种方法让轮胎的 self.age = self.car.age 自动更新?

十分感谢。

0 投票
1 回答
74 浏览

python - 在超类中使用描述符以避免子类中的代码重复

在 python 中,我有一个基类,从中派生出一组子类。每个子类都有一些特定于子类的函数和许多独特的属性,这些属性具有使用@property装饰器定义的 getter 和 setter。但是如果我有很多属性,就会导致很多代码重复,因为 getter 和 setter 都具有相同的形式。这是一个粗略的示例草图,以数据库访问为例:

有什么方法可以在 BaseClass 中定义一些东西以避免编写所有这些@property装饰器?理想情况下,我只需在子类中定义一些东西,例如self.mapping = {'property1a':'columnX', 'property1a':'columnX'}SubClass_1 和self.mapping = {'property2a':'columnZ'}SubClass_2。

0 投票
2 回答
46 浏览

python - 自动更新类属性

我正在构建一个knapsack将(另一个类)列表Items作为参数的类。每个物品都有一个重量和一个价值,一个背包应该有一个总重量(所有的总和item.weights)和总价值(所有的总和item.values)。

我想要完成的knapsack.total_weightknapsack.total_valueknapsack.items.append(new_item).

到目前为止,我已经尝试过装饰items,total_weighttotal_valuewith @property,但它似乎不起作用。关于如何正确使用属性装饰器的任何想法,或者我应该查看不同的实现?