1

我正在尝试使用 Map 来引用类函数,但在格式化/排序方面遇到了困难。我听说使用 map 有点过时了,所以我绝对愿意接受替代解决方案(for loops?)在此先感谢。

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
>>> 

如果需要更多信息,请告诉我。我意识到有很多关于这个问题的帖子,并且已经对其中的许多帖子进行了整理,但无济于事。

4

2 回答 2

4

这是一个列表理解答案。我喜欢这个比map()

logs = [LogFile(fname) for fname in lognames]
于 2012-06-26T19:20:58.817 回答
2

您不必__init__显式调用。尝试:

logs = map(LogFile, lognames)

有时将类视为可调用的会有所帮助。您可以将类视为如下所示:

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

基本上,一个类可以被认为是你调用来创建一个对象实例的东西。这不是真的,但在许多情况下似乎是这样。

于 2012-06-26T19:14:12.497 回答