问题标签 [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.
python - 对非类属性使用 Python 的 __get__ 描述符
使用__get__
描述符我想实现这样的目标:
事实证明,__get__
只有当实例是某个其他类的类属性时才会调用该描述符,而当实例是独立对象(未绑定到任何类属性)Wrapper
时,它不会被调用。Wrapper
有没有办法让__get__
描述符在非类属性中工作?
主要目标是实现包装器,它在使用时就像包装的值一样(我知道乍一看这听起来没什么用,但在某些用例中这会有所帮助)。那么也许有其他方法可以在不使用__get__
描述符的情况下实现这一点?
python - Python - 我的班级没有调用 __get__
这是我的代码:
我想要的是返回my_ret_value
,但我得到的是:
我已经阅读了Python Descriptors 示例,如果我更改我的代码以遵循它的工作原理 - 但为什么我不能在我的班级上按原样做呢?还有其他方法吗?
编辑 :
感谢您的意见,我没有很好地理解它。能__repr__
解决我的问题吗?
我想要的是我将一个字符串值更改为一个对象,我想将此对象视为一个字符串,并具有一些额外的属性。
python - 需要有关 python 描述符功能的帮助
我正在尝试使用 python 描述符解决问题。代码如下
预期的 O/P 是
但我明白了
请帮助我应该在哪里更改或者是否有其他更好的方法。
python - Python 描述符中实例和所有者的目的是什么?
我正在尝试理解 Python 中的描述符。我似乎无法理解的是描述符方法中的实例和所有者是什么:
现在我已经阅读了文档说:
所有者始终是所有者类,而实例是通过所有者访问属性的实例,或者当通过所有者访问属性时为 None。
不幸的是,我无法理解这意味着什么。所有者是否指类本身?类对象?那么实例传递给它的目的是什么?
python - 嵌套类装饰器也是描述符类
我有一种情况,我需要使用下面的嵌套装饰器,
装饰器的实现如下所示,
问题是没有调用 deco2 类的描述符方法,我需要调用它。当我做类似下面的事情时,
实际,
预期的
我需要有单独的装饰器是有原因的。考虑到这一点,我怎么能做到这一点?另外,如果有人可以解释为什么 deco2. get没有被调用,那太好了!谢谢。
使用 Python 3.7.x
python - 如何冻结多个相关类方法的一些参数
什么是“最好”的方法来获取使用一些常见参数名称(假设意味着相同的东西)的函数集合,并创建一个包含这些函数的对象,但一些关键参数值是固定的,或者至少它们的默认值是固定的.
如果我要使用一组函数来处理由一组属性定义的某些特定数据,我通常会使用一个类,提供必须在__init__
.
但有时从函数开始更有意义,或者您别无选择,因为您使用的是其他人的代码。然而,您希望方便地修复某些参数的值,并且在操作时不必重复指定这些值,这很无聊并且容易出错。它是 DRY 的一种形式。
如果您有一个功能,您只需使用functools.partial
. 但是,当您拥有大量功能时,有什么好的方法可以做到这一点。
这是我如何使用一个参数的示例:
这是一个使用所有具有“路径”参数(我们将修复到本地主文件夹)的 os.path 函数的示例。
给我
['exists', 'isfile', '_get_sep', 'islink', 'lexists', 'ismount', 'expanduser', 'expandvars', 'normpath', 'abspath', '_joinrealpath', 'relpath']
这并不完全令人满意,因为(1)根据我要修复的参数的位置,我将被迫使用仅关键字调用,(2)我想要看起来更像普通类的东西,带有self 具有我固定的属性,随后由函数使用,(3)它只是一个参数示例。
我猜巧妙地使用装饰器和/或描述符可以做一些好事。
python - 组成:为什么当“包含的实例”改变时,“容器实例”的属性没有更新?
我想更好地理解容器对象属性和包含对象属性之间的关系。
我想了解这个例子的输出:
我创建了一个类 Car 和一个类 Tire。
轮胎还有一个属性 age 应该“指向”名为 bmw 的汽车实例的属性。因此,我认为通过更改 bmw 实例的属性,倍耐力属性 age 也应该更新,因为它引用了相同的变量。从示例中可以看出,情况并非如此。
我该怎么做才能真正更新它?我计划多次使用作文,所以在最后一堂课中使用它是非常不切实际的
finalInstance.age = previousInstances.tire.car.age。
我希望这个输出:
但我得到的是:
任何人都可以帮我找到一种方法让轮胎的 self.age = self.car.age 自动更新?
十分感谢。
python - 在超类中使用描述符以避免子类中的代码重复
在 python 中,我有一个基类,从中派生出一组子类。每个子类都有一些特定于子类的函数和许多独特的属性,这些属性具有使用@property
装饰器定义的 getter 和 setter。但是如果我有很多属性,就会导致很多代码重复,因为 getter 和 setter 都具有相同的形式。这是一个粗略的示例草图,以数据库访问为例:
有什么方法可以在 BaseClass 中定义一些东西以避免编写所有这些@property
装饰器?理想情况下,我只需在子类中定义一些东西,例如self.mapping = {'property1a':'columnX', 'property1a':'columnX'}
SubClass_1 和self.mapping = {'property2a':'columnZ'}
SubClass_2。
python - 自动更新类属性
我正在构建一个knapsack
将(另一个类)列表Items
作为参数的类。每个物品都有一个重量和一个价值,一个背包应该有一个总重量(所有的总和item.weights
)和总价值(所有的总和item.values
)。
我想要完成的knapsack.total_weight
是knapsack.total_value
在knapsack.items.append(new_item)
.
到目前为止,我已经尝试过装饰items
,total_weight
和total_value
with @property
,但它似乎不起作用。关于如何正确使用属性装饰器的任何想法,或者我应该查看不同的实现?