Python 기초

파이썬, 클래스에 __slots__ 사용하기

수알치 2022. 5. 21. 16:02

파이썬, 클래스에 __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 ...

 

 

반응형