파이썬에서의 비공개 속성과 보호된 속성

매일 공부(ML)·2023년 1월 11일
0

Fluent Python

목록 보기
62/130

객체지향 상용구

파이썬스러운 객체

파이썬에서의 비공개 속성과 보호된 속성

파이썬에 private 수장자가 있는 자바와 달리 비공개 변수를 생성할 수 있는 방법은 없으나, 서브 클래스에서 "비공개"성격의 속성을 실수로 변경하지 못하게 하는 간단한 메커니즘은 있다.

예를 들면

클래스 외부에 노출시키지 않고 내부적으로 개의 상태를 나타내는 mood 객체 속성을 사용하는 Dog라는 클래스가 있고, 우리는 Dog를 상속해서 Beagle이라는 클래스를 정의해야하고, Dog에 mood라는 속성이 있는지 모르고 Beagle에서 mood라는 속성을 정의하는 경우 이름 충돌이 일어나서 mood 속성값을 엉뚱하게 변경하게 되어서 디버깅하기가 어렵다.


예방법

속성명을 mood처럼 두 개의 언더바로 시작하고 언더바없이 또는 하나의 언더바로 끝나도록 정의하면, 파이썬은 언더바와 클래스명을 변수명 앞에 붙여 객체의 dict에 저장하고, Dog 클래스의 경우 mood는 _Dogmood가 되고 Beagle 클래스의 경우 _Beaglemood가 된다. 이런 기능을 이름 장식이라고 한다.

#_와 클래스명을 앞에 붙여 비공개 속성명 장식하기

v1  = Vector2d(3,4)
v1.__dict__
v1._Vector2d__x

이름 장식은 안전을 제공하지만, 보안 기능은 아니므로 실수로 접근하는 것을 막도록 설계 되어있지만 고의적인 악용을 막지는 못한다.


Summary

Vector2d 요소는 '비공개' 속성이고, Vector2d 객체는 "불변형"이고, 파이썬에는 비공개 속성과 불변 속성을 정의하는 진정한 방법이 없다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글