코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
클래스 상속에 대한 질문입니다.
오 * 진 | 2019-02-19

class AdvancedList(list):
    def replace(self,a,b):
        while a in self:
            self[self.index(a)] = b

x = AdvancedList([1,2,3,1,2,3,1,2,3]):

x.replace(1,100)
print(x)


위 코드는 list 클래스를 상속받는 AdvancedList 클래스를 만들어서
replace 라는 메서드를 만드는 코드인데요

위처럼 replace 메서드에서 전달받은 리스트객체를 직접 수정하는 코드는 쉽게 이해가 되는데


class AdvancedList(list):
    def replace(self,a,b):
        self = list(map(lambda x : b if x==a else x,self))

x = AdvancedList([1,2,3,1,2,3,1,2,3]):

x.replace(1,100)
print(x)


이렇게 리스트를 만들어서 다시 할당하는 느낌으로 코드를 만들면 
의도와는 다르게 

[1,2,3,1,2,3,1,2,3] 이 출력되더라고요
왜 안될까 생각하다가

replace 메서드 부분의
self = list(map(lambda x : b if x==a else x,self)) 밑에다가

print(self) 를 추가하면

[100,2,3,100,2,3,100,2,3]
[1,2,3,1,2,3,1,2,3]

이렇게 출력되는걸 보고

replace의 매개변수 self 가 map 함수의 self 로 전달되는거 까지는 의도대로 됬는데
다시 할당할때의 self 는 별개의 객체라는 걸 알게됬습니다.



여기서 의도대로 원래의 리스트 [1,2,3,1,2,3,1,2,3] 에 접근해서 재할당하려면 어떻게 해야하나요?

  • 관 * 자
  • 2019-02-19 (19:42)
안녕하세요.

일반적인 범주의 질문이 아니라서 이 게시판을 통해 답변드리기 곤란한 면이 있어

메일로 답변 드렸습니다.

감사합니다.^^