포스트

파이썬 __slots__ 사용법 이해하기

__slots__가 무엇인가요?

__slots__는 파이썬 프로그래밍 언어에서 사용되는 특별한 클래스 속성입니다. 이 속성을 사용하면 객체의 메모리 사용량을 줄이고, 속성 할당을 더 빠르게 만들 수 있습니다. 일반적으로, 파이썬 객체는 다양한 속성을 동적으로 할당할 수 있는데, __slots__를 사용하면 특정 속성만을 허용하도록 제한할 수 있습니다.

__slots__를 사용해야 하나요?

__slots__를 사용하면 두 가지 주요 이점이 있습니다:

  1. 메모리 절약: 파이썬의 일반적인 객체는 그 속성을 위한 딕셔너리를 갖고 있습니다. 딕셔너리는 메모리를 상당히 많이 사용하는 자료구조입니다. __slots__를 사용하면 이러한 딕셔너리를 생성하지 않으므로 메모리를 절약할 수 있습니다.

  2. 속도 향상: 속성의 조회와 할당이 더 빠르게 이루어집니다. 속성이 미리 정의되어 있기 때문에, 파이썬은 이를 더 효율적으로 처리할 수 있습니다.

__slots__ 사용 예제

기본적인 사용법은 아래와 같습니다:

1
2
3
4
5
6
class MyClass:
    __slots__ = ('name', 'age')

person = MyClass()
person.name = "John"
person.age = 30

여기서 __slots__nameage만을 객체 속성으로 허용하고 있습니다.

주의사항과 제약

  1. 상속문제: __slots__를 가진 클래스를 상속받을 경우, 자식 클래스에서 __slots__를 정의하지 않으면 딕셔너리가 생성됩니다. 이를 방지하려면 자식 클래스에서도 __slots__를 정의해야 합니다.

  2. 동적 속성 할당: __slots__를 사용하면 그 외의 새로운 속성은 추가할 수 없습니다.

  3. __weakref____dict__: __slots__를 사용하면, 일반적으로 __weakref____dict__ 속성은 사용할 수 없습니다. 필요한 경우, __slots__에 명시적으로 추가해야 합니다.

AttributeError 처리

__slots__로 정의되지 않은 속성을 추가하려고 하면 AttributeError가 발생합니다. 예를 들어, 위의 MyClass 예제에서 person.job = "Engineer"라고 하면 AttributeError: 'MyClass' object has no attribute 'job'라는 오류 메시지가 출력됩니다.

__slots__는 특히 메모리 사용량과 속도가 중요한 상황에서 유용합니다. 하지만 그로 인한 제약사항도 있으니, 잘 고려하여 사용해야 합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.