setattr和getattr,何时使用?

为什么这些功能在那里?是否有些惯用
比去obj.field?
有什么可以和他们在一起的东西.
参考?

# 回答1


8月22日,8:50*下午,大师 您可以通过字符串动态生成它们.在某些情况下您
在运行时不知道您要拉什么属性:
DEF SHOW_INSIDES(OBJ):
对于dir(obj)中的attr:
打印"属性%r:%r"%(attr,getAttr(obj,attr))
类Hello(对象):
a = 1
b = 2
班级再见(对象):
C = 1
d = 500
打印show_insides(你好)
(... 15个内置...)
属性'a':1
属性'b':2
打印show_insides(再见)
(... 15个内置...)
属性'c':1
属性" D":500
在这种情况下,您可以看到我们拉动对象的属性
使用DIR(),该列表列表,然后拉每个属性
我们发现.
# 回答2


8月22日,10:17*PM,Jason Scheirer 您可以通过字符串动态生成它们.在某些情况下您
在运行时不知道您要拉什么属性:
DEF SHOW_INSIDES(OBJ):
*对于dir(obj)中的attr:
* *打印"属性%r:%r"%(attr,getAttr(obj,attr))
类Hello(对象):
* * a = 1
* * b = 2
班级再见(对象):
* * C = 1
* * d = 500
打印show_insides(你好)
(... 15个内置...)
属性'a':1
属性'b':2
打印show_insides(再见)
(... 15个内置...)
属性'c':1
属性" D":500
在这种情况下,您可以看到我们拉动对象的属性
使用DIR(),该列表列表,然后拉每个属性
我们发现.
我可能会补充:如果您不必这样做,请避免这样做. obj.field是
进行对象属性的方式有95%的时间. 5%
您进行元编程或其他虐待的时间
对象系统是使用get/setAttr时.
# 回答3


2008年8月22日星期五20:50:17 -0700,Maestro写道:
天堂不!使用setAttr和getAttr是 *少 *惯用性.
绝对地.考虑:
类foo(对象):
经过
foo = foo()
setattr(foo," x y",1)
打印getAttr(foo," x y")
这可能是对setattr/getAttr的滥用,但有时
您可能在运行时不知道属性的名称,所以您不能
编写foo.attr,因为您不知道该编写什么代替attr.
那就是setattr和getattr(以及delattr和hasattr)来的地方
发挥作用.
- -
史蒂文
# 回答4


Jason Scheirer aécrit:
(剪)
是什么使您标记为"元编程"并将/setattr标记为"滥用" ???

标签: python

添加新评论