星期三, 六月 20, 2007

python setattr

>>> class tree:
... def __init__(self): pass
...
>>> t = tree
>>> t = tree()
>>> t.x = 1
>>> print t.__dict__
{'x': 1}
>>> t.'' = 1
File "", line 1
t.'' = 1
^
SyntaxError: invalid syntax
>>> t. = 1
File "", line 1
t. = 1
^
SyntaxError: invalid syntax
>>> setattr(t, '', 2)
>>> print t.__dict__
{'': 2, 'x': 1}
>>> setattr(t, '?', 2)
>>> print t.__dict__
{'': 2, 'x': 1, '?': 2}
>>> print t.?
File "", line 1
print t.?
^
SyntaxError: invalid syntax
>>> setattr(t, '.y', 3)
>>> print t.__dict__
{'': 2, 'x': 1, '?': 2, '.y': 3}
>>> print t..y
File "", line 1
print t..y
^
SyntaxError: invalid syntax
可见,使用 setattr 可以创建非常不规范的 attr_name,它实际上只是作为一个字符串存放在 instance.__dict__ 中了。在:
2007/06/python-dict-pseudo-private-attributes.html
中我也已经讨论过 __dict__ 的相关问题,实际上是一脉相承的。

没有评论: