본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬 __slots__의 효과

by good4me 2020. 9. 14.

goodthings4me.tistory.com

 

■ 파이썬에서는 각 객체마다 해당 객체의 속성을 저장하기위해 __dict__을 사용하는데, __dict__은 그 형태로 인해 메모리를 많이 사용한다. 이로 인해 수백 수천개의 객체가 생성될 경우, 그에 상응한 수만큼 __dict__이 생성되어 시스템에 부담이 된다.

# __slots__은 객체마다 생성되는 __dict__을 생성못하게 하여 메모리 효율성을 높이고, 객체의 속성(변수) 추가(생성)을 제한할 수 있다.

good4me.co.kr

class Point3D:
    __slots__ = ('x', 'y', 'z')  # 속성(변수)를 x, y, z로 제한함
    
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
        
    def __str__(self):
        return '3D 좌표 : ({0}, {1}, {2})'.format(self.x, self.y, self.z)


def main():
    p1 = Point3D(1, 1, 1)
    p2 = Point3D(24, 27, 31)
    print(p1)  # 3D 좌표 : (1, 1, 1)
    print(p2)  # # 3D 좌표 : (24, 27, 31)
    
    #p1.v1 = 30
    # AttributeError: 'Point3D' object has no attribute 'v1'
    
    #print(p1.__dict__)
    # AttributeError: 'Point3D' object has no attribute '__dict__'
    
 
main()

# 클래스 내에 __slots__ 가 없으면
# p1.v1 = 30 이 실행되어 
# print(p1.__dict__)의 결과, {'x': 1, 'y': 1, 'z': 1, 'v1': 30} 출력됨

 

[참고 자료] 윤성우의 열혈파이썬 중급편

 

댓글