파이썬 __slots__ 사용법 이해하기
__slots__
가 무엇인가요?
__slots__
는 파이썬 프로그래밍 언어에서 사용되는 특별한 클래스 속성입니다. 이 속성을 사용하면 객체의 메모리 사용량을 줄이고, 속성 할당을 더 빠르게 만들 수 있습니다. 일반적으로, 파이썬 객체는 다양한 속성을 동적으로 할당할 수 있는데, __slots__
를 사용하면 특정 속성만을 허용하도록 제한할 수 있습니다.
왜 __slots__
를 사용해야 하나요?
__slots__
를 사용하면 두 가지 주요 이점이 있습니다:
메모리 절약: 파이썬의 일반적인 객체는 그 속성을 위한 딕셔너리를 갖고 있습니다. 딕셔너리는 메모리를 상당히 많이 사용하는 자료구조입니다.
__slots__
를 사용하면 이러한 딕셔너리를 생성하지 않으므로 메모리를 절약할 수 있습니다.속도 향상: 속성의 조회와 할당이 더 빠르게 이루어집니다. 속성이 미리 정의되어 있기 때문에, 파이썬은 이를 더 효율적으로 처리할 수 있습니다.
__slots__
사용 예제
기본적인 사용법은 아래와 같습니다:
1
2
3
4
5
6
class MyClass:
__slots__ = ('name', 'age')
person = MyClass()
person.name = "John"
person.age = 30
여기서 __slots__
는 name
과 age
만을 객체 속성으로 허용하고 있습니다.
주의사항과 제약
상속문제:
__slots__
를 가진 클래스를 상속받을 경우, 자식 클래스에서__slots__
를 정의하지 않으면 딕셔너리가 생성됩니다. 이를 방지하려면 자식 클래스에서도__slots__
를 정의해야 합니다.동적 속성 할당:
__slots__
를 사용하면 그 외의 새로운 속성은 추가할 수 없습니다.__weakref__
와__dict__
:__slots__
를 사용하면, 일반적으로__weakref__
와__dict__
속성은 사용할 수 없습니다. 필요한 경우,__slots__
에 명시적으로 추가해야 합니다.
AttributeError
처리
__slots__
로 정의되지 않은 속성을 추가하려고 하면 AttributeError
가 발생합니다. 예를 들어, 위의 MyClass
예제에서 person.job = "Engineer"
라고 하면 AttributeError: 'MyClass' object has no attribute 'job'
라는 오류 메시지가 출력됩니다.
__slots__
는 특히 메모리 사용량과 속도가 중요한 상황에서 유용합니다. 하지만 그로 인한 제약사항도 있으니, 잘 고려하여 사용해야 합니다.