2010-07-09 28 views
0

我遇到了Python在访问变量时抛出AttributeError的问题。使用成员变量的Python AttributeError

代码如下,为了清晰起见进行了编辑。

class mycollection(object): 
    """ 
    Collection of stuff. 
    """ 
    #"compile-time" define class variables. 
    __slots__ = ["stuff_list"] 

    def __init__(self): 
     self.stuff_list = [] 

    def add_stuff(self, stuff): 
     self.stuff_list.append(stuff) 


#later on.. 
collection = mycollection() 
stuff = stuff() 
collection.add_stuff(stuff) 

生成此错误。

Traceback (most recent call last): 
    File "", line 210, in <module> 
    main() 
    File "", line 206, in main 
    thestuff = load_file(inputfile, filetype) 
    File "pyyft.py", line 121, in load_file 
    collection.add_stuff(stuff) 
    File "pyyft.py", line 55, in add_test 
    self.stuff_list.append(stuff) 
AttributeError: stuff_list 

通过documentation检查,我不明白为什么这个错误出现。

+3

某处在你的代码,你必须(ERR,可能)有字符串 “test_stuff”。请发布该代码。 – unutbu 2010-07-09 17:45:41

+0

修复了'__init__'中的拼写错误 - 如果您复制/粘贴了该文件,您可能需要在源代码中修复它。另外,你使用'__slots__'的任何特定原因? – 2010-07-09 17:47:02

+0

@Jed - 是的,我正在避免自动版本 – 2010-07-09 17:49:41

回答

2

__ini__应该__init__

+0

评论应该是评论 – SilentGhost 2010-07-09 17:50:01

+0

Durp。当定时器OK时,接受传入。 – 2010-07-09 17:50:09

+0

我看到杰德史密斯编辑了这个问题,但我怀疑这是原因。 – Oddthinking 2010-07-09 17:50:44

0

这是不是可以 “更Python”?

collection.stuff_list.append(test_stuff)

+0

仅仅因为可以,与物体的内部状态混杂在一起并不是Pythonic。 – 2010-07-09 18:13:52

+0

我并没有把握'pythonic'这个概念的全部内容,但我确实知道你所建议的是在对象和对象所处的范围之间泄露信息。换句话说,它增加了模块之间的代码耦合。换句话说,它打破了OO范式。然而,你称之为代码维护和进化变得更加困难。 – 2010-07-09 19:35:46