programing

__init__ 내의 클래스 함수를 호출합니다.

goodsources 2022. 9. 5. 23:20
반응형

__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상당히 많은 수준의 지시도 가지고 있습니다.이 함수의 정의를 원합니다.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.

그 후, 예를 들면, 이전에 호출되었던 것에 액세스 할 수 있습니다.stat3와 함께self.stats[2].

다음과 같이 parse_file을 선언해야 합니다.def parse_file(self). "self" 파라미터는 대부분의 언어에서 숨겨진 파라미터이지만 python에서는 그렇지 않습니다.클래스에 속하는 모든 메서드의 정의에 추가해야 합니다.그런 다음 클래스 내의 모든 메서드에서 함수를 호출할 수 있습니다.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

parse_file, 를 선택합니다.self인수(와 같이)__init__기타 필요한 콘텍스트가 있는 경우 통상대로 추가 인수로 전달합니다.

당신의 문제는 실제로 init 함수를 올바르게 입력하지 않는 것이라고 생각합니다.이렇게 해야 한다

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

     def parse_file():
          pass

언급URL : https://stackoverflow.com/questions/12646326/calling-a-class-function-inside-of-init

반응형