파이썬 오류 : NameError: name 'new' is not defined

조회수 1140회
class S(Car):



    def __init__(self,type_=""):
        self.maxfuel = 60
        self.fueleconomy = 10

        if (type_ == new):
            self.type_ = new
        elif (type_ == old):
            self.type_ = old
        else:
            print("new와 old 중 하나만 택하시오.")

이렇게 코드를 작성해서 s1=S(new) 라고 했는데 NameError: name 'new' is not defined 이런 오류가 뜨네요. new를 어떻게 다시 정의해야 하나요?

  • new 가 문자이면 s1=S("new") 로 해야하지 않을까 싶어요 김호원 2021.6.1 15:45
  • 그렇게 하면 TypeError: __init__() takes 1 positional argument but 2 were given 이런 오류가 뜹니다 알 수 없는 사용자 2021.6.1 16:03

2 답변

  • new와 old가 무엇인지 지정되지 않아 생기는 문제로 보입니다.

    덤으로 초기 타입을 다음과 같이 지정해두면 if문을 하나 줄일 수 있습니다.

    class S(Car):
        def __init__(self, type_ = 'new'):
            self.maxfuel = 60
            self.fueleconomy = 10
            self.type_ = 'new'
    
            if (type_ == 'old'):
                self.type_ = 'old'
    
  • 올려주신 코드로만으로 확인할때에는 초보님 말씀처럼

    new old 가 무엇인지 지정되지 않아 발생한 문제입니다.

    그리고 아래 댓글과 같이 에러 발생한 부분에 대해서는 본 질문에서 반영안된 부분같아

    다시 확인해보시는게 좋을거 같습니다.

    class Car:
        def __init__(self):
            self.test = ''
    
    class S(Car):
        def __init__(self, type_=""):
            self.maxfuel = 60
            self.fueleconomy = 10
    
            if (type_ == "new"):
                self.type_ = "new"
            elif (type_ == "old"):
                self.type_ = "old"
            else:
                print("new와 old 중 하나만 택하시오.")
    
        def __str__(self):
            return f'{self.maxfuel} , {self.fueleconomy} , {self.type_}'
    
    try:
        s = S("new")
        print(s) #60 , 10 , new
    
        s1 = Car("") #error
    except Exception as e:
        print(e) #__init__() takes 1 positional argument but 2 were given
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)