2012-06-26 72 views
1

我試圖用Map來引用類函數,但是在格式化/排序時遇到了困難。我聽說使用地圖是過時的,所以我絕對開放的替代解決方案(循環?)預先感謝。Python問題 - 地圖和類 - 初學者

lognames = [ "C:\Users\makker1\Desktop\logs\loga.txt", 
       "C:\Users\makker1\Desktop\logs\logb.txt", 
       "C:\Users\makker1\Desktop\logs\logc.txt" ] 

class LogFile: 
    def __init__(self,filepath): 
     self.logfile = open(filepath, "r") 
     self.head = None 

    def __str__(self): 
     return "x=" + str(self.x) + "y="+str(self.y) 

    def readline (self): 
     if self.head != None: 
      self.head = self.logfile.readline() 

    def previewline (self): 
     if self.head == None: 
      self.head = self.logfile.readline() 

    def close (self): 
     self.logfile.close() 



logs = map(LogFile(self,filepath).__init__(), lognames) 
heads = map(lambda log: None, logs) 


>>> 
Traceback (most recent call last): 
    File "C:\Users\makker1\Desktop\mergesort-final.py", line 30, in <module> 
    logs = map(LogFile(self,filepath).__init__, lognames) 
NameError: name 'self' is not defined 
>>> 

如果需要更多信息,請告訴我。我意識到有很多關於這個問題的帖子,並且通過其中許多沒有用處。

回答

2

您不必明確地致電__init__。嘗試:

logs = map(LogFile, lognames) 

有時它有助於想到一類爲調用。你可以把一類的東西像下面這樣:

def LogFile(filepath): 
    class _LogFile: 
     def __init__(self, path): 
      ... 
    return _LogFile(filepath) 

基本上,一個類可以被看作是你打電話來創建一個對象實例的東西。這不是真的,但在許多情況下,它似乎是。

+1

如果您確實想在'map()'中顯式使用'__init__',則需要關閉parens;您需要將*函數引用*傳遞給'map()',而不是調用該函數並將調用結果傳遞給'map()'。 – steveha

+0

哦,這是開創性的。這種語言太挑剔了,我無法跟蹤手續。非常感謝你! – Raj

+0

@Raj - 關於'class'是一個函數的註釋並沒有超過這種情況。我只是發現它是思考實例創建的有用方法。快樂的蟒蛇。 –

4

這裏是列表理解的答案。我喜歡這比map()更好。

logs = [LogFile(fname) for fname in lognames]