출처 : 윤성우의 열혈 파이썬 : 중급
29. __slots __의 효과
__dict __의 단점과 그 해결책
# point_3d.py
class Point3D:
def __init__(sefl, x, y, z):
self.x = x
self.y = y
self.z = z
def __str__(self):
return '({0}, {1}, {2})'.format(self.x, self.y, self.z)
def main():
p1 = Point3D(1, 1, 1)
p2 = Point3d(24, 17, 31)
print(p1)
print(p2)
main()
# point_slots.py
class Point3D:
__slots__ = ('x', 'y', 'z')
def __init__(sefl, x, y, z):
self.x = x
self.y = y
self.z = z
def __str__(self):
return '({0}, {1}, {2})'.format(self.x, self.y, self.z)
def main():
p1 = Point3D(1, 1, 1)
p2 = Point3d(24, 17, 31)
print(p1)
print(p2)
main()
- 파이썬은 __dict __의 이름으로 객체 하나당 하나씩 딕셔너리를 할당한다
- 딕셔너리는 리스트나 튜플에 비해서 메모리 사용량이 많다
- 많은 수의 객체를 생성해야 하는 경우에는 객체 하나당 하나씩 존재하는 __dict __의 존재가 부담이 된다
- slots은 이 클래스를 기반으로 생성한 객체의 변수는 x, y, z로 제한한다는 의미이다
- 즉 이 문장을 삽입함으로 인해서 x, y, z 이외에 객체에 변수를 추가하는 것은 불가능하다
__dict __이 있을 때와 __slots __가 있을 때의 속도 차이
- __slots __가 존재하는 경우 객체 내에 있는 변수에 접근하는 데 있어서 속도 상의 이점도 얻을 수 있다
'프로그래머 > Python' 카테고리의 다른 글
[윤성우의 열혈 파이썬 중급편] 31. nested 함수와 closure (0) | 2020.12.24 |
---|---|
[윤성우의 열혈 파이썬 중급편] 30. property (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 28. 정보 은닉과 __dict __ (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 27. 연산자 오버로딩 (0) | 2020.12.24 |
[윤성우의 열혈 파이썬 중급편] 26. 스페셜 메소드 (0) | 2020.12.24 |