Re: 36.8 연습문제 질문 드립니다.
, 김 기업님이 작성답변 감사합니다. 알려주신 사이트 가서 순차 흐름보니 잘 이해되네요.
class AdvancedList(list):
def __init__(self, num_list):
self = num_list
print(self) ---> 1번
def replace(self, origin, newer):
print(self) ---> 2번
for num in self:
if num == origin:
self[self.index(origin)] = newer
위의 코드에서 __init__ 내부에서 self = num_list 라인이 수행되며 self의 id가 바뀌는 것이 원인이었습니다. 부모 클래스에 의해 인스턴스 x에 인자가 전달되어 리스트가 만들어지는 것인데 __init__ 이 수행되며 인스턴스 x의 id를 바꿔버려서 __init__에서와 replace 의 self가 서로 다른 객체가 되어 이후의 x.replace 메서드를 수행했을때 원하는 결과가 얻어지지 않았습니다.시험삼아 self 에 바로 할당하지 않고 인스턴스 변수 추가하여 self.num_list = num_list 이런 식으로 작성하고 이후 코드도 변경하니 self의 id 값 안 바뀌고 잘 되네요.