파이썬 클래스 내 함수 호출 - paisseon keullaeseu nae hamsu hochul

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

Show
    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


    답변