Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在不使用hasattr的情况下为class属性设置默认值的方法_Python 2.7_Class_Attributes - Fatal编程技术网

Python 2.7 在不使用hasattr的情况下为class属性设置默认值的方法

Python 2.7 在不使用hasattr的情况下为class属性设置默认值的方法,python-2.7,class,attributes,Python 2.7,Class,Attributes,我必须为类实例设置属性,以防它不存在。 我正在使用下面的代码来实现这一点: class O(object): pass o = O() if not hasattr(o, 'some_attr'): setattr(o, 'some_attr', None) print o.some_attr 有更好的方法来执行这样的操作吗?类及其实例有自己的名称空间,由\uuu dict\uuuu属性表示,该属性是字典,因此如果hasattr->setattr流,可以使用方法代替,向类实例

我必须为类实例设置属性,以防它不存在。 我正在使用下面的代码来实现这一点:

class O(object):
    pass

o = O()
if not hasattr(o, 'some_attr'):
    setattr(o, 'some_attr', None)
print o.some_attr

有更好的方法来执行这样的操作吗?

类及其实例有自己的名称空间,由
\uuu dict\uuuu
属性表示,该属性是字典,因此如果hasattr->setattr流,可以使用方法代替
,向类实例添加新属性:

class O():
    pass

o = O()
o.__dict__.setdefault('some_attr', None)

print o.some_attr
@MartijnPieters建议的方法:

此外,我们还可以使用函数访问
\uuu dict\uuu
属性,并调用
setdefault
方法,如上面的代码示例所示:

vars(o).setdefault('some_attr', None)
print o.some_attr

我会使用
vars(o)
(就像你会使用
len(obj)
而不是
obj.\uuu len\uuu()
@MartijnPieters谢谢你的建议!这可能是执行此类操作的首选方式)Python3.1:
vars([object])
注意:不应修改返回的字典:对相应符号表的影响未定义。()