2012-07-27 49 views
1

下面給出的是一個類的一個片段,其中我試圖創建對象和獲取錯誤:爲什麼我無法在我班的__init__中執行簡單的操作?

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 

什麼是導致錯誤,我該如何解決它?

+1

該代碼不會產生該錯誤,因此我們需要查看更多上下文。唯一可以說的是,你發佈的內容是:1.全局聲明是不必要的,2.你可能意思是'self.filepath' – Julian 2012-07-27 20:15:08

+0

是self.filepath修復它。但是,這意味着每當我創建一個對象,該對象的文件路徑變爲空。我需要一個使用它的對象持久化的文件路徑。 – ritratt 2012-07-27 20:19:33

+1

然後你想要[class屬性](http://docs.python.org/tutorial/classes.html#class-objects) – Julian 2012-07-27 20:24:38

回答

2

嘗試使用insted的全局特殊字self

因此,像這樣

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

原因這個錯誤出現是因爲在想什麼蟒蛇你試圖做的是兩兩件事之一:

  1. 無論你想引用一個名爲filepath的全局變量 - 很明顯,這不是你正在嘗試的
  2. 不太清楚的是,你也可以定義一個名爲filepath的類屬性 - 唯一的問題是你無法定義一類屬性具有該類功能的ute。你只能在課堂上這樣做 - 在一個類功能之外

所以爲了在一個函數中聲明變量,你必須在它之前使用self這個單詞。

編輯**如果你希望它是一個類的屬性 - 因爲我假設是你的意思,你可以這樣做是這樣的:

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

yes self.filepath修復它。但是我希望它成爲一個全局變量。怎麼做? – ritratt 2012-07-27 20:20:01

+0

刪除在第二個例子中'__init__'中的'filepath'上添加'self.'。 – mgilson 2012-07-27 20:22:08

+0

@mgilson是的,你是對的。請參閱我的編輯。 – 2012-07-27 20:26:42

0

我不認爲你」重新給我們足夠的信息。例如:

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

產生沒有錯誤。

你究竟想要做什麼?

+0

我做了確切的事情,除了我導入FoF,然後創建一個對象。 – ritratt 2012-07-28 08:12:38

相關問題