생성자 없는데 어떻게 값을 이용할 수 있는지 궁금합니다.
, you hyojin님이 작성36.8 연습문제: 리스트에 기능 추가하기에서
모범 답안에서
class AdvancedList(list):
def replace(self, old, new):
while old in self:
self[self.index(old)] = new
x=AdvancedList([1,2,3,1,2,3,1,2,3])
x.replace(1,100)
print(x)
x를 인스턴스로 만들어 줄때 클래스 내부에 init없는데 어떻게 변수를 넘겨주는지 궁금합니다. x.replace에서도 왜 self로 값을 받아서 사용할 수 있는지 너무 궁금합니다...
Re: 생성자 없는데 어떻게 값을 이용할 수 있는지 궁금합니다.
, 도장_ 관리자님이 작성class AdvancedList(list)는 list 클래스를 상속한 AdvancedList 클래스를 만든 겁니다. Unit 36.2~36.5를 다시 복습하세요.
상속했고, 특별한 작업이 없으면 부모 클래스의 __init__이 자동으로 호출됩니다. Unit 36.3.2에 보면 기반 클래스를 초기화하지 않아도 되는 경우로 설명되어 있습니다.
이처럼 파생 클래스에 __init__ 메서드가 없다면 기반 클래스의 __init__이 자동으로 호출되므로 기반 클래스의 속성을 사용할 수 있습니다.
class SMS_store(list):
def add_new_arrival(self, from_number, time_arrived, text_of_SMS):
self.append((False, from_number, time_arrived, text_of_SMS)) #append tuple to self
def message_count(self):
return len(self)
파생클래스에서 __init__에서 특별한 작업을 하고 싶다면 상속하면 됩니다.
class SMS_store(object):
def __init__(self):
self.messages = []
def add_new_arrival(self, from_number, time_arrived, text_of_SMS):
self.messages.append((False,from_number,time_arrived,text_of_SMS))
def message_count(self):
return len(self.messages)
my_inbox = SMS_store()
my_inbox.add_new_arrival('01234','9:37 AM','How are you?')
class 선언에서 (list)는 list를 인수로 받는다는 뜻이 아닙니다. list를 부모 클래스로 상속받는다는 뜻입니다.