gpt4 book ai didi

Python self 在类定义级别的 lambda 中,Eclipse 咆哮,但解释器可以工作,这是标准化的吗?

转载 作者:行者123 更新时间:2023-11-30 23:39:39 26 4
gpt4 key购买 nike

我有以下代码(缩短以留下要点):

class Strange():
def setter(self, val):
self._val = val

val = property(lambda: self._val, setter)

Eclipse Helios 中的 PyDev 声称 self 是不可见的,我认为这应该是真的,并且与 Python 的明确哲学相一致。然而,代码在 ipython 2.7 中运行良好,并在代码库中使用。

这是一个安全漏洞,一个词法范围的怪癖吗?或者是否有 PEP 或文档对此进行解释,而只是 PyDev 缺少某些内容?

编辑:回答评论:它可以在我的机器上运行,也许你的Python和操作系统版本不同。但是谢谢,这在某种程度上回答了我关于它不是标准行为的问题。

这是我的情况下的控制台输出:

barszcz:~ $ uname -a
Linux barszcz 3.4.9-1-ARCH #1 SMP PREEMPT Wed Aug 15 18:59:31 CEST 2012 x86_64 GNU/Linux
barszcz:~ $ ipython2
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
Type "copyright", "credits" or "license" for more information.

IPython 0.13 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.

In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class Strange():
: def setter(self, val):
: self._val = val
:
: val = property(lambda: self._val, setter)
:
:<EOF>

In [2]: Strange
Out[2]: __main__.Strange

In [3]: Strange()
Out[3]: <__main__.Strange instance at 0x26425f0>

编辑2:好吧,我在调用 Strange().val 时遇到错误,正如 Martijn 所建议的那样。但奇怪的是,这是运行时错误而不是字节码编译错误:

In [4]: Strange().val
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-88f3db8b81d0> in <module>()
----> 1 Strange().val

TypeError: <lambda>() takes no arguments (1 given)

我希望 lambda 的内容能够在执行 Strange 定义时运行...如果有人已经在定义中遇到错误,请在评论中告诉我。

最佳答案

您的代码不正确。

它会解析,并且您可以实例化该类 - 您甚至可以设置 val,但如果您尝试访问 val<,您将收到 TypeError/ 从那里。

实际上,您的代码中还有另一个错误:您没有从 object 继承 - 这使得你的类(class) "old style class"在 Python 2 中,属性根本不适用于它们。

在我们的代码片段中从 val 中获取值并不会向您显示明显的错误,因为在归因时将完全绕过 setter。

唯一缺少的是 lambda 表达式本身的 self 参数(当然,将其作为新的样式类):

class Strange(object):
def setter(self, val):
self._val = val

val = property(lambda self: self._val, setter)

关于Python self 在类定义级别的 lambda 中,Eclipse 咆哮,但解释器可以工作,这是标准化的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com