goodthings4me.tistory.com
■ 파이썬에서는 각 객체마다 해당 객체의 속성을 저장하기위해 __dict__을 사용하는데, __dict__은 그 형태로 인해 메모리를 많이 사용한다. 이로 인해 수백 수천개의 객체가 생성될 경우, 그에 상응한 수만큼 __dict__이 생성되어 시스템에 부담이 된다.
# __slots__은 객체마다 생성되는 __dict__을 생성못하게 하여 메모리 효율성을 높이고, 객체의 속성(변수) 추가(생성)을 제한할 수 있다.
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} 출력됨
[참고 자료] 윤성우의 열혈파이썬 중급편
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 중첩함수(Nested Function)와 클로저(Closure) (0) | 2020.09.15 |
---|---|
[python] 파이썬 property객체, @property 데코레이터 (0) | 2020.09.14 |
[python] 파이썬의 정보은닉(Information Hiding)과 __dict__ 메서드에 대해 (0) | 2020.09.13 |
[python] 파이썬 __str__ 메서드에 대해 (0) | 2020.09.13 |
[python] 파이썬 __init__, __str__, __iter__, __next__ 등의 메서드 (0) | 2020.09.12 |
댓글