何时可以动态添加字段到对象?

3 投票
1 回答
505 浏览
提问于 2025-04-18 05:34

我正在学习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'

撰写回答