파일 이름을 가져 와서 파일을 열고 일부 데이터를 파싱하는 코드를 작성 중입니다. 나는 이것을 수업 시간에하고 싶다. 다음 코드가 작동합니다.
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
답변
