问题标签 [setattr]

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 投票
2 回答
989 浏览

python - 需要一种简单的方法将元信息/类添加到 python 列表/元组变量?

全部,

我希望将简单的元信息包含在列表对象中,请参见下面的代码。

我的问题是

  1. 为什么我不能将 setattr() 用于变量“a”,因为列表应该已经有 ' setattr ' 函数?

  2. 有没有一种简单的方法将元信息附加到列表/元组变量而不是重载“ setattr ”或将该列表嵌入到字典中?

谢谢!

0 投票
1 回答
501 浏览

python - setattr() 未设置

我有一个类(机器人),它有一个属性“健康”;因为这个类有很多参数,我希望用户输入很多,我选择循环访问 {param:explanation} 的字典,并为每个参数输入一个值来设置。

因此,打印 attr、getattr... 行返回(示例)“health 50”但是,打印 str 行返回“0 hp”

发生这种情况有什么原因吗?

0 投票
1 回答
1086 浏览

python - 通过字符串设置属性

我正在尝试通过setattr(self, item, value)函数在类之外设置 Python 类属性。

在另一个脚本中,我创建了一个实例并希望指定属性并让属性修改器处理简单的验证。

问题是它似乎没有调用setMyProperty(self, value) mutator。为了快速测试以验证它没有被调用,我将 mutator 更改为:

我对 Python 还很陌生,也许还有另一种方法可以做我想做的事情,但是有人可以解释为什么调用setattr(self, item, value)时没有调用 mutator吗?

还有另一种通过字符串设置属性的方法吗?在设置属性值时,我需要执行 mutator 内部的验证。

0 投票
1 回答
656 浏览

python - 类范围内的动态实例变量

我有一个类是 SQLAlchemy 声明性基础的后代。我需要编写一个桥对象,它将在声明性基础和我正在运行的另一个系统之间进行转换,但我希望桥对象不必确切知道我的记录中有哪些列。在这种情况下,我想要一种方法来列出记录中的所有列,避免必须在两个仅模糊相关的地方维护属性列表,同时尽量减少复制。这意味着我可以创建列属性,然后维护一个单独的列名列表,但同样,复制是一个因素——如果我以后想更改这个东西的结构,我必须在两个地方都进行更改。

在这种情况下,我考虑将列定义粘贴在 dict 中,然后迭代 dict 以使用 setattr 创建每个列定义,如下所示:

现在,问题来了:如果我在类级别上粘贴这段代码,self 还没有定义,我得到一个错误(这是有道理的)。如果我坚持这个__init__, self 被定义,但 SQLAlchemy 的声明性基础给出了一个错误,因为在类完成定义时表上没有主键(这是有道理的,因为这些属性直到运行时才会设置)。

所以,说了这么多,我如何在不使用 eval 的情况下获得我想要的东西,或者在这里使用 eval 是我唯一的选择?


编辑:我接受了下面的解决方案,但没有 100% 使用它(尽管它绝对有助于让我得到答案)。这是我最终做的事情:(请注意,DeclarativeMeta 是 sqlalchemy.ext.declarative 的一部分,与 declarative_base 相同的包)

然后,在我的派生类中,

0 投票
3 回答
711 浏览

python - Python:您定义函数 __setattr__ 的方式不一致?

考虑这段代码:

我希望得到相同的输出。但是,使用 CPython 2.5、2.6(类似于 3.2)我得到:

使用 PyPy 1.5.0,我得到了预期的输出:

哪个是“正确”的输出?(或者根据 Python 文档的输出应该是什么?)


是 CPython 的错误报告。

0 投票
1 回答
467 浏览

python - 如何使用 Python 在运行时创建属性?

所以我试图弄清楚我想做的事情是否可能。我正在为应用程序编写一些测试代码,并且我的对象包含代表我们产品界面中的一些元素的属性。我想要做的是能够将应用程序运行器和数据对象传递给一个新类,并让它根据数据对象中的属性子集动态生成一组访问器属性。到目前为止我的想法:

  1. 创建一个属性的子类,其中包含从接口中提取额外信息所需的元数据
  2. 重构现有数据对象以使用 UI 中相关字段的新属性子类
  3. 创建一个接受 UI 驱动程序对象和数据对象的新生成器类
    • 反映数据对象以获取其所有属于新属性子类类型的成员的列表
    • 根据属性子类中的元数据将来自 UI 的信息存储到生成器类实例的成员(计划使用setattr
    • 在运行时创建属性,使 (b) 中创建的成员只读,并提供与现有代码一致的接口(即使用.[name]而不是.[name]()

我想除了步骤 3c 之外,我已经弄清楚了一切。有没有办法在运行时动态创建属性?任何帮助将不胜感激。

0 投票
3 回答
17234 浏览

python - 在 Python 中使用 getattr/setattr 访问列表项

尝试在 Python 中使用 getattr 和 setattr 函数访问/分配列表中的项目。不幸的是,似乎无法将列表索引中的位置与列表名称一起传递。
这是我尝试的一些示例代码:

另请注意,在 attr 函数的第二个参数中,您不能在此函数中连接字符串和整数。

干杯

0 投票
1 回答
247 浏览

python - Python:如何返回对象的实例以及用 setattr 分配的属性

我对 python 还是很陌生,但是我需要与一些编写为一堆 python 模块的软件(.py 文件,以防我错误地将它们识别为“模块”。)这个程序有一些非常有用和复杂的功能我真的无法破解(如果没有别的,因为每次更新软件时,我都必须重新破解所有内容。)

我有一个看起来像这样的 python 脚本:

然后,如果我尝试:

然后result正确包含首先分配给它thingfromsoftwareresult.dimensions尚未分配的所有属性的值 ( has no attribute "dimensions")

目标是以某种半连贯的方式存储dimensions每个result计算和配置的。myfunctionthing

真实代码(根据要求)

0 投票
2 回答
36836 浏览

python - 如何在 Python 中的新型类上正确覆盖 __setattr__ 和 __getattribute__?

我想覆盖我的 Python 类__getattribute____setattr__方法。我的用例是通常的用例:我有一些我想要处理的特殊名称,并且我想要其他任何东西的默认行为。因为__getattribute__,似乎我可以简单地通过提高来请求默认行为AttributeError。但是,我怎样才能达到同样的效果__setattr__?这是一个简单的示例,实现一个具有不可变字段“A”、“B”和“C”的类。

问号用什么代替?对于旧式类,答案显然是self.__dict__[name] = value,但文档表明这对于新式类是错误的。

0 投票
1 回答
8862 浏览

python - setattr() 和 object.__setattr__() 有什么区别?

我知道你不能调用object.__setattr__不是继承自的对象object,但是两者之间还有什么不同的吗?如果这很重要,我正在使用 Python 2.6。