강의로 돌아가기
자율주행차 개발

제가 작성해서 실행되는 코드입니다만 질문이 있습니다

작성한 코드 첨부합니다만. 제가 달아놓은 주석중에서 25행의 truck.load()의 존재유무에 따라
super.load가 에러를 내지 않는 문제가 신기합니다.
차이를 알려주세요

작성중인 코드―super
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Car():

    def __init__(self, name):
        self.name = name

    def run(self):
        print("{}차가 달립니다.".format(self.name))


class Truck(Car):
    # 이 아래에서 __init__ 메소드를 오버라이드 하세요.
    def __init__(self,name,capacity):
        super().__init__(name)
        self.capacity = capacity  #capacity라는 매개변수를 받아서 self(이 Truck class를 의미)의 capacity라는 변수로 담는다는 의미라고 생각됨

    def load(self):
        print("{}짐을 실었습니다.".format(self.capacity))
        #super.run() #super 뒤에()를 생략했는데 이거 자체로 에러를 내지는 않는다.왜지? 이유는 마지막 25행의 truck.load()를 주석처리 했기 때문이다.
                    #25행이 주석처리 되어있지 않다면 이걸로 에러를 낸다. 이거는 무슨차이일까?
        super().run() #이게 맞는 문법임

truck = Truck("포터", "2ton") # 자식class Truck에 포터와 2라는 값을 매개변수로 전달, 이걸 truck이라는 인스턴스에 컴퓨터메모리상의 주소값으로 기록(저장)
                         #class는 아무것도 그려지지 않은 도면기본양식이고 instance는 어떤 제품의 치수를 그린 실제 제품이 그려진 도면이라고 보면 된다.
                         #붕어빵틀(class)와 붕어빵(인스턴스) 또는 건물도면(class)와 그 도면을 바탕으로 지어진 실제 건물들(instance) 관계로 이해하면 된다
truck.load()
  • 정두식_
    죄송하지만 질문이 이해가 안되네요. 정두식_ 2018.06.19 16:53
  • Ellie Lee
    파이썬이 인터프리터 언어이기 때문 아닐까요? 소스코드를 모두 컴파일한다면 당연히 super.run에서 컴파일에러가 나겠지만 truck.load()를 실행할 때만 super.run까지 가게 되고, 그렇지 않을 때는 super.run은 건너 뛰기 때문에 에러가 나지 않는 것 같네요. 저도 이제 파이썬 공부 3일차. Ellie Lee 2018.08.01 14:17
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.