首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setattr(对象,名称,值)与object.__setattr__(名称,值)

setattr(对象,名称,值)与object.__setattr__(名称,值)
EN

Stack Overflow用户
提问于 2013-02-07 16:40:47
回答 1查看 1.4K关注 0票数 6

我正在读 in python?的帖子,@bruno有一条评论说:

人们不应该直接调用魔术方法--它们是操作符或泛型函数的实现。在这种情况下,惯用的解决方案是使用setattr(obj, name, value)

setattr的情况似乎超出了他自己的评论范围:不是运算符,也不是泛型函数的实现。

有人能解释一下这句话吗?我为什么要选择一个而不是另一个呢?

在这种情况下,最好使用obj.__setattr__(name, value)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 16:46:49

您应该始终使用setattr(),注释是非常正确的。

例如,并非所有类型都实现__setattr__,但如果类型允许设置属性,则setattr()将正确工作。

双下划线方法是钩子,用于使您的自定义类实现自定义行为.如果存在这些钩子,Python将使用这些钩子,如果缺少钩子,则返回到默认行为。通过绕过API,您将不得不在自己的代码中实现回退。

您只需要在实现子类时直接调用__setattr__,然后最好通过super()调用:

代码语言:javascript
复制
def Foo(Bar):
   def __setattr__(self, attr, value):
       # do something with attr and value
       super(Foo, self).__setattr__(attr, value)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14756289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档