为什么我无法在班级的__init__中执行简单的操作?

时间:2012-07-27 20:11:42

标签: python class global-variables

下面给出的是我正在尝试创建对象并收到错误的类的片段:

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

导致错误的原因是什么?如何解决?

2 个答案:

答案 0 :(得分:2)

尝试使用全局特殊字self

这样的事情

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

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

  1. 要么你试图引用一个名为filepath的全局变量 - 这显然不是你想要的那样
  2. 不太清楚的是,您还可以定义一个名为filepath的类属性 - 唯一的问题是您无法使用该类的函数定义类属性。你只能在课堂上这样做 - 在课堂功能之外
  3. 因此,为了在函数中声明变量,你必须在它之前使用单词self。

    编辑**如果你想让它成为班级的一个属性 - 正如我所说的那样你的意思是你可以这样做:

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

答案 1 :(得分:0)

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

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

不会产生错误。

你究竟想做什么?