问题标签 [descriptor]

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 回答
3340 浏览

python - python3:使用 .__get__() 将方法绑定到类实例,它可以工作,但为什么呢?

我知道如果你想向类实例添加一个方法,你不能像这样进行简单的赋值:

这确实会导致print_var表现得像一个正常的函数,所以这个self参数不会有他的典型含义:

为了让函数被认为是一个方法(即将它绑定到实例),我曾经使用过这段代码:

但我发现.__get__也可以用于此目的:

这里的问题是它只是有效,但我不明白如何以及为什么。关于的文档.__get__似乎没有多大帮助。

如果有人能澄清python解释器的这种行为,我将不胜感激。

0 投票
3 回答
9435 浏览

java - “描述符”和“签名”有什么区别?

我现在正在使用 ASM(Java 字节码检测库)。要检索给定方法的签名,有一个名为“desc”的字段。我猜这是“描述符”的缩写,但为什么不将其命名为“签名”?“描述符”和“签名”之间有什么区别吗?

0 投票
1 回答
3625 浏览

java - Java方法描述符中美元符号的含义?

例如,它是 Jikes RVM 堆栈的一部分。

'access' 应该是一个方法名。但是我检查了类源代码及其接口,那里没有称为“访问”的方法。我在谷歌上找不到答案,因为谷歌讨厌各种标点符号。有人可以在这里帮忙吗?非常感谢。

0 投票
1 回答
1637 浏览

python - python类数据描述符列表

我似乎无法弄清楚如何获取类数据描述符的列表。基本上,我想对字段和未设置的字段进行一些验证。例如:

然后我想在这样的模型中实现它:

我将如何获取我定义的字段列表?我在想,我可以做到以下几点:

但是我遇到了继承问题,有什么想法吗?

0 投票
4 回答
4633 浏览

python - 以编程方式为类生成方法

我有大约 20 种方法可以重定向到采用原始方法和其余参数的包装器方法:

如何以编程方式添加更多这些方法?这大约是在一切开始看起来不对之前我得到的:

我可以通过在类定义中分配或其他感觉更自然的方法来做到这一点吗?

我宁愿__get__在可能的情况下使用和朋友,而不是来自types.

0 投票
2 回答
165 浏览

python - 将函数放入本地命名空间以加快访问速度,同时考虑描述符

我在课堂上的艰难循环中使用numpy.random.normal函数。

我知道在 Python 中使用多个查找非常慢。其中numpy.random.normal有 3 次查找:首先numpy是查找,然后是random,然后是normal

所以我决定通过分配numpy.random.normal一个局部变量来解决这个问题_normal

开始了:

我真正关心的是描述符。当访问类中的变量时,会在所有基类中查找具有相同名称的数据描述符。它在这里描述:

检查objectname.__class__.__dict__attrname。如果存在并且是数据描述符,则返回描述符结果。objectname.__class__搜索同一案例的所有基地。

所以,我想,如果我_normal像上面那样放入本地空间,它将查找数据描述符的所有基类。我担心它会成为经济放缓的根源。

我的担忧是否合理?

我是否应该担心在基类中查找描述符所需的时间?

当在类中使用位于模块深处的函数时,是否有更好的方法来加速对其的访问?


在对答案的评论中进行了讨论。

我决定提供一些看起来很重要的额外实施细节(对于我的特殊情况)。

实际上,代码更接近于此(非常非常简化):

0 投票
2 回答
2102 浏览

python - 对 python 类同时使用 __setattr__ 和描述符

我正在编写一个 python 类,它使用__setattr____getattr__提供自定义属性访问。

但是,某些属性无法以通用方式处理,因此我希望对这些属性使用描述符。

一个问题出现在描述符中,描述符__get__将被调用以支持实例__getattr__,但是当分配给属性时,__setattr__将被调用以支持描述符__set__

一个例子:

印刷:

描述符__set__永远不会被调用。

由于该__setattr__定义不只是覆盖有限名称集的行为,因此没有明确的地方可以遵循object.__setattr__

是否有推荐的方法来分配属性使用描述符(如果可用),__setattr__否则?

0 投票
1 回答
821 浏览

python - 您可以在运行时更改 python 描述符的 __get__ 方法吗?

所有,正如标题所问,是否可以__get__在运行时更改描述符的方法。我的情况是,我有一个在运行时动态修饰和未修饰的函数。我希望这个函数的结果可以作为一个属性使用,类似于它@property所做的。我研究了一下,发现它是一个描述符,但似乎描述符的__get__方法是只读的。

上面的代码大致做了我想要的

  1. 该值在构造函数中设置
  2. 我可以随心所欲地装饰get_x方法
  3. instance.x返回正确的值

我的问题是我宁愿不必创建该get_x方法,因为它基本上是不必要的。我只是无法装饰__get__x 的方法,因为它是只读的。

背景

我正在编写一个基于回合的策略游戏,并且我正在使用装饰器来实现持久性条件。当我使用测试用例时,我能够有效地实现这些装饰器,但问题是要获得计算值,您必须使用函数调用,而不是属性访问。这似乎是个坏主意,因为获取描述单元的值会不一致地使用函数或属性。如果可以的话,我想对属性进行标准化。

0 投票
4 回答
1979 浏览

python - 创建一个行为类似于任何变量但在更改/读取时具有回调的类

我想创建一个行为类似于 python 变量但在“变量”被更改/读取时调用一些回调函数的类。

换句话说,我希望能够按如下方式使用该类:

将 x 定义为 myclass 的一个实例。构造函数(INIT)将 2 个函数作为参数:每次更改 x 时调用的函数,以及每次“读取”x 时调用的函数

以下声明:

change_callback(1)将“保存” 1 并触发可以执行任何操作的调用。

以下声明:

将检索存储的值并调用read_callback()这可能会更改存储的值并执行其他操作。

我希望它适用于任何类型,例如能够编写如下内容:

x=[1 2 3]这会触发change_callback([1 2 3])

x.append(4)会触发change_callback([1 2 3 4])(并且可能会触发之前的调用read_callback()

x={'a':1}会触发change_callback({'a':1})

print(x)当然会触发对 read_callback() 的调用...并返回最后存储的值进行打印。

这个想法是可以记录对变量的任何访问,或生成其他计算……毫无疑问。

我觉得这应该是可能的,但我真的不知道我的对象应该继承什么......如果我必须将我限制为一种类型,例如列表,有没有办法重新定义所有赋值运算符(包括“一次性”中的 append()...) 等方法,保持原始行为(基类方法)并添加回调...

还是有更合适的方法(模块...)来实现相同的目标...?

提前致谢,

0 投票
1 回答
203 浏览

python - 描述符的 Python 元编程:如何在类定义后添加描述符?

在已经定义类之后如何关联描述符?

在正常的描述符场景中,我会这样做:

然后无论何时Descriptor.__get__(self,obj,kls)被调用,第二个参数都是一个实例,X一切都是快乐和美好的。

但是如果X已经像这样定义了怎么办:

事后如何添加描述符(并使其正常运行!)?我所有的尝试都没有与班级建立适当的联系

我正在这样做,因为我有一堆我想以 DRY 方式添加的属性,并且我希望它们是 cached_properties (我用来记忆它们每个值的描述符)