问题标签 [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 投票
0 回答
177 浏览

python - django模型现场工厂

我正在尝试做这样的事情:

当我创建用户实例时,将一些名称传递给构造函数 python 会引发错误:

到底是怎么回事?我如何为模型字段制作工厂?

0 投票
1 回答
668 浏览

python - Python - 如何将实例变量值传递给描述符参数?

考虑到以下情况,

项目列表类:

在这种情况下,我想将self.item_num值传递给类中的item_num内部定位器字典ItemList

原因是我想要每个item_id并且item_title指的是特定的item_num.

我被困在这部分:

self.item_num当实例已经创建时,值不能传递给定位器。

执行:

是否可以从实例变量更新数据描述符?

如何将实例变量值传递给数据描述符参数?


附加信息:

我试图调用item_iditem_title作为实例属性,但没有运气。我注意到数据描述符不能是这篇文章的实例属性:数据描述符应该是类属性

物品类别:

描述符:

0 投票
1 回答
147 浏览

python - 访问嵌套实例值的嵌套描述符

您如何编写返回具有描述符的对象的描述符,该描述符返回具有描述符的其他对象?在下面的代码中,getattrin__get____set__以不同的实例作为参数调用,但它引用相同的对象。请告知如何使它通过所附的测试。

一般来说,这应该是生成严格模式的 JSON 报告的助手。它生成结构,但值在结构节点中是通用的。仅当我在一个类中有多个相同类型(ObjectField)的类属性时,问题才会暴露。

0 投票
1 回答
68 浏览

python - 如何在 Python 中实现描述符

我正在根据文档中的属性示例处理我自己的描述符:https ://docs.python.org/3/howto/descriptor.html#properties

但由于某种原因,我所有的属性都是一样的。

首先,为什么传递给构造函数的值没有按我的意图设置/访问?为什么变化a似乎b也在变化?

0 投票
1 回答
125 浏览

python - 使用“Python 描述符”的条件动态验证器

我想构建一个简单的“DataSource”类,其属性名为“data_source_type”和“data_source_path”。其中“data_source_type”是一个枚举,“data_source_path”是一个字符串,取决于“data_source_type”,我想将“ValidFilePath”或“ValidHttpURL”等适当的验证设置为“data_source_path”。

我不想编写 IF-ELSE 并有一个意大利面条数据源类,我想利用“Python 描述符”或任何其他优雅的 Python 构造,它们会考虑 SRP(单一责任原则)并支持函数式编程构造。

数据源.py

截至目前,在第 51 行中,我放置了“ValidHttpURL”,我想根据“data_source_type”设置适当的验证描述符

预期行为

实际行为

***更新的答案***

0 投票
1 回答
771 浏览

python - __slot__ 描述符如何在 python 中工作?

我知道__slots__它的用途和用途。

member但是,我还没有找到关于使用创建的描述符的底层机制如何__slots__工作的全面答案。

对象级值实际存储在哪里?

有没有办法在没有直接属性访问描述符的情况下更改这些值?
(例如,当上课时C__dict__可以做C.__dict__['key']而不是C.key

__slots__可以通过创建类似的类级描述符来“扩展”定义对象的不变性吗?作为对此的进一步阐述;可以使用元类构建不可变对象,但不__slots__通过手动创建所述描述符来明确定义吗?

0 投票
0 回答
350 浏览

python - Python:如何访问嵌套描述符中的实例属性?

例子

举个例子

InLeaf.__get__ instance指向Branch实例。但是,我需要访问value,它是 的实例成员Root

背景

我的任务是为大文件头编写解析器。解析器应该是健壮和快速的。因此,我建议使用描述符来懒解析字段,而不是解析整个头部结构。这允许仅在需要时对标头字段进行解码/编码。因此,有一个根对象将完整的标头保存为一个字节数组,当访问一个字段时,它的描述符会读取或写入这个字节数组。但是,标题结构是分层的并且包含嵌套字段。出于这个原因,我需要从嵌套描述符访问根字节数组。

相关问题和解决方案

关于实例描述符的类似问题之前已经提出。

1.创建一个实例

解决方案是将描述符添加到实例而不是类,并将共享值设置为引用。IMO 这似乎有点低效。

请参阅在 pythonPython 中动态添加 @property - 如何将实例变量值传递给描述符参数?

2.覆盖__getattribute__

我认为这行不通,因为__getattribute__ofBranch不知道该Root实例。

3. 传播value

在遍历结构时,Branch.__get__会调用它,我们可以在其中存储对根实例的引用,该引用可从Leaf.__get__. 但是,如果我们在多个Root.


最后,我的问题是对于这个特定问题是否有更好的解决方案?

0 投票
1 回答
748 浏览

python - 了解使基于类的装饰器支持实例方法的技术

我最近在 Python 装饰器库的装饰器中遇到了一种技术,memoized它允许它支持实例方法:

正如文档字符串中所解释的那样,该__get__方法是使装饰器支持实例方法的“魔术发生”的地方。以下是一些表明它有效的测试:

我想了解的是:这种技术究竟是如何工作的?它似乎非常普遍地适用于基于类的装饰器,我在我的回答中应用了它是否可以 numpy.vectorize 实例方法?.

到目前为止,我已经通过注释掉该方法并在子句__get__之后放入调试器来对此进行调查。else似乎每当您尝试使用数字作为输入调用它时self.func,它都会引发 a :TypeError

据我了解,https://docs.python.org/3/reference/datamodel.html#object。get,定义你自己的__get__方法以某种方式覆盖了你(在这种情况下)调用时发生的事情self.func,但我正在努力将抽象文档与这个例子联系起来。谁能一步一步解释这个?

0 投票
1 回答
41 浏览

python-3.x - Python3.Descriptor.Class

您好,我的任务很简单,但我又被卡住了:

如何将类中的变量用于描述符?

我有commission来自父类的变量,我需要在调用时将它用于描述符setself.amount = int(amount) * int(commission)

我怎样才能做到这一点?

谢谢!

完整代码如下:

0 投票
1 回答
187 浏览

python - 有效 Python 中的描述符

我正在阅读“Effective Python”一书中的第 31 项。我不明白为什么在第 97 页的示例中,为什么math_gradewriting_gradescience_grade类的类(静态)变量Exam,而不是常规的实例变量。如果它们是实例变量,那么Grade类就不需要在其全局簿记字典中使用实例作为键。在我看来,作者似乎犯了一个明显的设计错误,只是为了说明如何使用描述符,即在 Grade 类中进行全局簿记,无论如何这似乎是个坏主意。

我的另一个问题更高级:这不是一种令人困惑、不清楚的做事方式吗?将多个对象的全局状态保存在一个注册表中,就像 Grade 一样。对我来说,这似乎不是一个可重复使用的干净设计。

对于没有这本书的人,这是对代码的参考:

https://github.com/SigmaQuan/Better-Python-59-Ways/blob/master/item_31_use_descriptors.py

具体来说