[python] __init__ 내부에서 클래스 함수 호출

파일 이름을 가져 와서 파일을 열고 일부 데이터를 파싱하는 코드를 작성 중입니다. 나는 이것을 수업 시간에하고 싶다. 다음 코드가 작동합니다.

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에는 몇 가지 수준의 indention도 있습니다. 함수를 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입니다).


답변

내가 틀리지 않으면 두 함수가 모두 클래스의 일부이므로 다음과 같이 사용해야합니다.

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

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

    def parse_file(self):
        #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() 

와:

self.parse_file()


답변

어때요?

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

def parse_file(filename):
    #do some parsing
    return results_from_parse

당신이라는 이름의 변수가 있다면 그건 그렇고, stat1, stat2, 등, 상황은 튜플을 구걸된다
stats = (...).

따라서 parse_file튜플을 반환하고 튜플을에 저장하십시오
self.stats.

그런 다음, 예를 들어, 호출 할 무엇을 사용했는지에 액세스 할 수 있습니다 stat3self.stats[2].


답변

에서 와 같이 인수를 parse_file취하십시오 . 다른 컨텍스트가 있으면 평소와 같이 추가 인수로 전달하십시오.self__init__


답변

다음과 같이 parse_file을 선언해야합니다. def parse_file(self). “self”매개 변수는 대부분의 언어에서 숨겨진 매개 변수이지만 파이썬에는 없습니다. 클래스에 속하는 모든 메소드의 정의에 추가해야합니다. 그런 다음 클래스 내부의 모든 메소드에서 함수를 호출하여self.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
      self.parse_file()

  def parse_file(self):
      #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


답변

문제가 실제로 init 함수를 올바르게 들여 쓰기하지 않은 것 같습니다.

class MyClass():
     def __init__(self, filename):
          pass

     def parse_file():
          pass


답변