在python中,是否有一个setdefault()等效于获取对象属性?

Ros*_*ers 14 python

Python的setdefault允许您从字典中获取值,但如果该键不存在,则您可以分配基于参数的值__CODE__.然后,您可以获取字典中键的任何内容.

没有操纵对象__CODE__是否有类似的对象功能?

例如,
我有一个__CODE__可能有也可能没有属性的对象__CODE__.我该怎么做:

result = setdefaultattr(foo,'bar','bah')
Run Code Online (Sandbox Code Playgroud)

Joh*_*hin 24

请注意,如果该属性不存在,则当前接受的答案将调用hasattr(),setattr()和getattr().只有当OP做了类似覆盖setattr和/或getattr的事情时才有必要 - 在这种情况下OP不是我们带他去的无辜的询问者.否则调用所有3个函数是粗略的; 应该跟随setattr()调用,return value以便它不会落到return getattr(....)

根据文档,hasattr()是通过调用getattr()和捕获异常来实现的.当属性已存在时,以下代码可能更快:

def setdefaultattr(obj, name, value):
    try:
        return getattr(obj, name)
    except AttributeError:
        setattr(obj, name, value)
    return value
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 7

Python没有内置的,但您可以定义自己的:

def setdefaultattr(obj, name, value):
    if not hasattr(obj, name):
        setattr(obj, name, value)
    return getattr(obj, name)
Run Code Online (Sandbox Code Playgroud)

  • 那“def setdefaultattr(o,n,v): return setdefault(o.__dict__, n, v)”呢?但这不适用于有插槽的课程。 (2认同)