1

Mapを使用してクラス関数を参照しようとしていますが、フォーマット/順序付けに問題があります。マップの使用は時代遅れだと聞いたので、私は間違いなく代替ソリューション(forループ?)を受け入れています。よろしくお願いします。

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 に答える