1

下面给出的是我试图创建对象并出现错误的类的一个片段:

class FoF(object):
        def __init__(self,path):
                filepath=[]
                filepath.append(self.FileOrFolder(path))

执行后我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "PathOps.py", line 6, in __init__
    def __init__(self,path):
  NameError: global name 'filepath' is not defined

之后我尝试了:

filepath=[]
class FoF(object):
        def __init__(self,path):
                global filepath.append(self.FileOrFolder(path))

然后再次:

File "<stdin>", line 1, in <module>
  File "PathOps.py", line 6, in __init__
    global filepath.append(self.FileOrFolder(path))
NameError: global name 'filepath' is not defined

是什么导致了错误,我该如何解决?

4

2 回答 2

2

尝试使用 insted 的 global 特殊词self

所以像这样

class FoF(object):
    def __init__(self,path):
        self.filepath=[]
        self.filepath.append(self.FileOrFolder(path))

出现此错误的原因是因为 python 认为您正在尝试做的是以下两件事之一:

  1. 要么你试图引用一个名为 filepath 的全局变量——这显然不是你想要的
  2. 不太清楚的是,您还可以定义一个名为 filepath 的类属性——唯一的问题是您不能使用该类的函数定义类属性。你只能在类内这样做——在类函数之外

因此,为了在函数中声明变量,您必须在它之前使用单词 self。

编辑**如果你希望它成为类的一个属性——正如我假设的那样,你的意思是你可以这样做:

class FoF(object):
    filepath=[]
    def __init__(self,path):
        self.filepath.append(self.FileOrFolder(path))
于 2012-07-27T20:15:06.810 回答
0

我认为你没有给我们足够的信息。例如:

>>> class FoF(object):
...     def __init__(self, path):
...             junk = []
...             junk.append(path)
... 
>>> foo = FoF('bar/path')

不会产生错误。

你到底想做什么?

于 2012-07-27T20:55:25.557 回答