何时可以动态添加字段到对象?
我正在学习Python中的curses库,想给curses窗口对象添加一个属性。
我写的简单程序是:
import curses
try:
stdscr = curses.initscr()
stdscr.cur_line = 0
finally:
#clean-up so your terminal isn't wrecked by above error
curses.nocbreak()
stdscr.keypad(False)
curses.echo()
curses.endwin()
出现的错误是:
$ python3 tmp
Traceback (most recent call last):
File "tmp", line 4, in <module>
stdscr.cur_line = 0
AttributeError: '_curses.curses window' object has no attribute 'cur_line'
不过,这个是可以正常工作的:
class Temp:
def __init__(self):
pass
t = Temp()
t.cur_line = 0 #does not fail
我想问的是:动态给一个实例添加字段什么时候会失败?Python是怎么区分我自己定义的类的实例和curses库中的类的实例的?
1 个回答
1
这种情况最常见的原因是你在尝试给用C语言写的库添加属性,而不是给纯Python对象添加属性。
>>> import pickle, cPickle
>>> pickle.dump.a=1
>>> cPickle.dump.a=1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'a'