파이썬, 클래스에 __slots__ 사용하기
파이썬, 클래스에 __slots__ 사용하기
글. 수알치 오상문
클래스 인스턴스 변수 처리를 고정시키므로 이후 추가적인 동적 생성을 금지한다.
파이썬 내부적으로 인스턴스 변수를 dict으로 관리하는데 이 부담을 제거하는 것이다.
이에 따라서 객체가 사용하는 메모리 사용량이 줄어들고 및 처리 속도가 향상된다.
class SlotsTest:
__slots__ = ('v1', 'v2', 'v3') # 인스턴스 변수는 v1, v2, v3 3개로 고정
# ['v1', 'v2', 'v3']
def __init__(self, item1, item2, item3):
self.v1 = item1
self.v2 = item2
self.v3 = item3
def setData(self, item1, item2, item3):
self.v1 = item1
self.v2 = item2
self.v3 = item3
def getData(self):
return self.v1, self.v2, self.v3
def __str__(self):
return f"{self.v1}, {self.v2}, {self.v3}"
st = SlotsTest(1, 2, 3)
print(st.getData())
print(str(st))
[결과 화면]
(1, 2, 3)
1, 2, 3
만약 인스턴스 변수를 추가하기 위해 설정한다면 다음처럼 에러가 발생할 수 있으므로 주의하자.
AttributeError: 'SlotsTest' object has no attribute ...