클래스 생성 소멸
조회수 377회
class cls:
log = []
def __init__(self, name):
self.name = name
print(self.name + " 생성.")
def add(self, val):
self.log.append(val)
def __del__(self):
self.log.clear() #################################### 이 부분
print(self.name + " 소멸.")
logs = []
mycls = cls('a1')
mycls.add("aa1")
logs.append(mycls.log)
mycls = cls('b1')
mycls.add("bb2")
logs.append(mycls.log)
print(logs)
위 코드에서 logs
에 aa1
, bb2
만 저장할려고 합니다.
위 #####부분 삭제 하면 aa1
,bb2 aa1
, bb2
로 저장 됩니다.
제가 C# 개발자여서 그런지 self.log.clear()
가 없어야 될 것 같은데..
고수님 부탁드립니다.
1 답변
-
작성하신 코드를 보면 cls 안의 log에 self가 붙어있지 않습니다.
이렇게 작성하실 경우 log는 인스턴스 변수가 아니라 클래스 변수가 되는데, 클래스 변수는 모든 인스턴스가 공유합니다.
즉, mycls에 새로운 인스턴스를 덮어씌우더라도 클래스 변수인 log는 계속 남아있게 됩니다.
따라서 해당 log에 새로운 값을 추가하면 기존 값 뒤에 추가되는 것이고,
logs.append(mycls.log)
를 실행하면 logs라는 리스트에 같은 주소를 가리키는 리스트가 중복되어 추가되기 때문에 두 값이 항상 같아지게 됩니다.log를
__init__
안으로 옮기시고 앞에 self를 붙이시면 원하시는 형태로 작동합니다.
댓글 입력