리스트를 상속한 클래스라는 점에서 인스턴스 생성시 전달된 인자를 별도로 처리해주지 않아도 해당 인스턴스에 리스트가 생성된다는 것은 이해 했습니다.
그런데 일반적으로 클래스 생성시 인자가 전달되면 init에서 해당 인자로 인스턴스 변수를 초기화 해주므로 그런 관점에서 코드를 아래처럼 해봤는데요.
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
이렇게 하고 수행하면 1번 위치에서는 [1, 2, 3, 1, 2, 3, 1, 2, 3] 이 잘 출력됩니다. 그런데 2번 위치에서는 [] 이렇게만 출력됩니다.
왜 이렇게 되는 것인지 설명 부탁 드립니다.
-------------------------------------------------------------
추가로 테스트를 해봤는데 1번과 2번 위치에서 self의 id가 다르게 나오네요. 같아야 하지 않나요?
답변 감사합니다. 알려주신 사이트 가서 순차 흐름보니 잘 이해되네요.
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 값 안 바뀌고 잘 되네요.