2012-06-26 63 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]