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

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

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.

그런 다음, 예를 들어, 호출 할 무엇을 사용했는지에 액세스 할 수 있습니다 stat3로 self.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

답변

Toplist

최신 우편물

태그