1. ホーム
  2. python

[解決済み] init__ 内でクラス関数を呼び出す

2022-04-20 15:47:01

質問

ファイル名を受け取り、ファイルを開き、いくつかのデータを解析するコードを書いています。これをクラスで行いたいと思います。次のコードは動作します。

class MyClass():
    def __init__(self, filename):
        self.filename = filename 

        self.stat1 = None
        self.stat2 = None
        self.stat3 = None
        self.stat4 = None
        self.stat5 = None

        def parse_file():
            #do some parsing
            self.stat1 = result_from_parse1
            self.stat2 = result_from_parse2
            self.stat3 = result_from_parse3
            self.stat4 = result_from_parse4
            self.stat5 = result_from_parse5

        parse_file()

しかし、この方法では、すべてのパース処理機構を __init__ 関数を使用します。この単純化されたコードでは問題ないように見えますが、関数 parse_file はインデントもかなりのレベルになっています。私は、この関数を parse_file() を以下のようなクラス関数として使用します。

class MyClass():
    def __init__(self, filename):
        self.filename = filename 

        self.stat1 = None
        self.stat2 = None
        self.stat3 = None
        self.stat4 = None
        self.stat5 = None
        parse_file()

    def parse_file():
        #do some parsing
        self.stat1 = result_from_parse1
        self.stat2 = result_from_parse2
        self.stat3 = result_from_parse3
        self.stat4 = result_from_parse4
        self.stat5 = result_from_parse5

もちろん、このコードは機能しません。 parse_file() のスコープ内にない。 __init__ 関数を使用します。の中からクラス関数を呼び出す方法はありますか? __init__ そのクラスの?それとも、私の考え方が間違っているのでしょうか?

どのように解決するのですか?

このように関数を呼び出してください。

self.parse_file()

を定義する必要があります。 parse_file() 関数はこのようになります。

def parse_file(self):

parse_file メソッドを呼び出す際には、オブジェクトにバインドする必要があります (静的メソッドではないため)。これは、オブジェクトのインスタンスに対して関数を呼び出すことで行われます(この場合のインスタンスは self .