问题标签 [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 回答
898 浏览

python - __setattr__ 与 __slots__ 用于在 Python 中约束属性创建

我一直在阅读有关如何使 Python 类不那么动态的文章,特别是不允许用户动态创建新属性。我读过重载__setattr__是一个很好的方法,而__slots__不是要走的路。最后一个帖子上的一篇文章实际上表明它__slots__可以破坏酸洗。(谁能证实这一点?)

但是,我只是在阅读 Python 2.2 的最新消息,而属性访问部分实际上建议将__slots__其用于约束属性创建的目的,而不仅仅是像其他人建议的那样进行优化。从 Python 的历史来看,有谁知道它的初衷__slots__是什么?约束变量创建是要被滥用的功能还是错误?人们__slots__在实践中是如何使用的?有很多人看到__setattr__过重载来限制属性创建吗?哪个最好?如果您更熟悉一种方法或另一种方法,请随时发布您所知道的方法的优缺点。另外,如果您有其他解决问题的方法,请分享!(请尽量不要只是重复__slots__已经在其他线程中表达过。)

编辑:我希望避免讨论“为什么?”,但第一个答案表明这会出现,所以我会在这里说明。在有问题的项目中,我们使用这些类来存储“配置信息”,允许用户使用他们的(用户的)参数设置对象的属性,然后将对象传递给程序的另一部分。对象不仅仅是存储参数,所以字典不起作用。我们已经让用户不小心输入了错误的属性名称,最终创建了一个新属性,而不是设置程序期望的属性之一。这未被检测到,因此用户认为他们正在设置参数但没有看到预期的结果。这让用户感到困惑,而且很难发现。

编辑 2,重新酸洗:这些对象将是我们将来想要存储的东西,酸洗似乎是一种很好的方法。如果__slots__显然是最好的解决方案,我们可能会找到另一种存储它们的方法,但酸洗肯定是有价值的,应该考虑在内。

编辑 3:我还应该提到,内存保护不是问题。很少会创建这些对象,因此节省的任何内存都可以忽略不计(例如 3-12 GB 机器上的 10 千字节)。

0 投票
2 回答
865 浏览

python - 使用 setattr 冻结方法的某些参数

为了自动生成参数化测试,我试图通过冻结现有方法的一些参数来将方法添加到类中。这是一段 Python 3 代码

但是,以下几行会产生相当令人失望的输出

打印“9”(而不是“0”)。我一定做错了什么,但我看不出是什么。你能帮我吗 ?

非常感谢


编辑:这个问题确实是重复的。我想承认所有评论的质量,它们比原始答案更深入。

0 投票
1 回答
2904 浏览

python - maya中的float和double有什么区别?

在 Maya 中,当使用 setAttr() 命令时,我们可以使用 float 和 double 作为变量类型。有什么区别?文档中的示例是相同的。

-类型浮动3

-类型双3

http://download.autodesk.com/global/docs/maya2014/en_us/CommandsPython/index.html

谢谢!

0 投票
2 回答
490 浏览

python - 在 Python 中使用 __setattr__ 进行属性别名

我有一个 Python 类,它有各种内部变量,我想将它们公开为 x、y,一个简单的例子是:

我原以为这行不通,因为__getattr__访问了自我的成员。但是,只要我不尝试定义 a ,一切都会正常工作__setattr__- 即使我只是让它等于pass,我也会得到递归。我应该如何实施__setattr__?特别是,如果他们的键不是 x 或 y,我应该调用什么?

另外,总的来说,我的问题是这是否是实现所需行为的正确方法,例如:

或者是否有更好的选择。我正在使用 python 2.7.5。谢谢!

0 投票
1 回答
1001 浏览

python - Django:使用字段名称作为字符串在 FileField 上调用 save()

我是 Django 新手,并且已经阅读并尝试了我想到的所有内容。

我有一个基于模型的表单。该模型包括 3 个 FileField 字段:

在我的代码中,我想遍历这些字段并将生成的文件保存到每个字段中。'img' 是我们的文件,filename 是文件名。所以,这是有效的:

但我需要一个带有字段名称而不是 img_big 的变量,例如:

我尝试使用 setattr(),但我不能或不知道如何使用它设置文件名,在这种情况下可能是不可能的。

也不行。

0 投票
2 回答
2466 浏览

python - 如何在我的函数中替换“eval”?

eval我很清楚在 Python 中使用这不是一个好习惯。这是我的代码:

我听说过这个setattr功能,但老实说我不知道​​如何实现它。

是否也可以通过使用该功能来做到这一点map

请注意,'md5', 'sha1', 'sha224'etc 是局部变量。当我eval在其中一个上使用该功能时,它们就变成了功能。

0 投票
2 回答
73 浏览

python - 使用动态创建的函数动态添加属性

我想实现一些像这样工作的东西:

灵感来自:http: //znasibov.info/blog/html/2010/03/10/python-classes-dynamic-properties.htmlHow to implement property() with dynamic name (in python) ,我实现了以下代码:

注意:我知道对于这个最小的代码使用__new__代替__init__是不合理的,但是稍后当我使用的子类时需要这样做Notebook

如果我使用版本 1: 1. 而不是拥有520被打印,它会打印2020. 我不明白为什么。打印函数会显示具有不同地址的函数数组。2. 我使用__class__了上面给出的博客条目的启发,但我不确定它的作用。它使属性成为类属性?(在我的情况下这将是非常糟糕的)

如果我使用版本 2:打印类似property object at 0x7fb86a9d9b50. 这似乎是有道理的,但我不确定我是否理解为什么它不会为版本 1 打印相同的内容。

有没有办法解决这个问题,使用任一版本(或另一种完全不同的方法)?


编辑

提出了解决该问题的有趣答案。这里对应的代码:

问题是:现在这个测试代码没有给出想要的输出:

我想这是可以预料的,因为该属性已添加到课程中……无论如何要克服这个问题?

0 投票
1 回答
837 浏览

python - 有没有办法使用 setattr 来获取错误,而无需将 setattr 与 django 模型一起使用?

如果我使用

代替

我没有收到与不存在属性相关的错误。有没有办法使用 setattr 来解决这个错误?

谢谢你。

0 投票
2 回答
1676 浏览

python - __setattr__ 方法来确保类中的对象是不可变的

我定义了以下类(其中很大一部分缩短了),但我的主要问题是一旦使用其初始化变量定义了此类的对象,我想确保这些变量在类外部是不可更改的......如果进行了这样的尝试,我将需要引发 AssertionError .. 我定义了setattr方法来引发此异常,但是在将这个方法放入其中之后,它会完全破坏以前的实例和测试,我一直在使用这个类进行相同的 AssertionError 每当尝试创建此类的对象...所以这里是我的类的显着简化版本。

所有其他类方法...

因此,一旦我尝试从此类中测试静音对象,除了使用此类中的其余方法破坏先前的测试之外,我还会遇到错误的异常..

0 投票
1 回答
608 浏览

python - Cython 无法使用 setattr

我在 cython 中有一个 cdef 类,我想用 setattr 内置函数初始化它的字段。但是,当我这样做时,我得到了一个执行错误:

我的代码如下:

你知道我该如何规避这个问题吗?