다양한 접근지정자와 언더스코어 활용

Underscore

# Ex1
# User underscore
# 1. 인터프리터, 2. 값 무시, 3.네이밍(국제화, 자릿수)

# Unpacking
x, _, y = (1, 2, 3)
print(x, y)

a, *_, b= (1, 2, 3, 4, 5)

print(a, b) # 1, 5

print('ex1 > ', x, y, a, b)

for _ in range(10):
    pass

for _, val in enumerate(range(10)): # 인덱스 무시하고 값만 볼때
    print(val)

생각 많이 해봐야하는 부분이 많다.

# ex2
# 접근지정자
# name : public
# _name : protected
# __name : private
# 파이썬 -> Public 강제X, 약속된 규약에 따라 코딩 장려()
# 타 클래스(클래스 변수, 인스턴스 변수 값 쓰기 장려 안함) -> Naming Mangling
# 타 클래스 __ 접근하지 않는 것이 원칙

# No user Property

class SampleA:
    def __init__(self):
        self.x = 0
        self.__y = 0
        self._z = 0

a = SampleA()

a.x = 1
print('Ex2 > x : {}'.format(a.x))
# print('Ex2 > y : {}'.format(a.__y))
print('Ex2 > z : {}'.format(a._z))
print('Ex2 > ', dir(a))

a._SampleA__y = 2
print(a._SampleA__y)
# ex3
# 메소드 활용 Getter, Setter

class SampleB:
    def __init__(self):
        self.x = 0
        self.__y = 0 # _SampleB__y

    def get_y(self):
        return self.__y

    def set_y(self, value):
        self.__y = value

b = SampleB()

b.x = 1
b.set_y(2)

print(b.get_y())

print(dir(b))

변수 접근 후 수정 부분에서 일관성 및 가독성이 하락

이런 부분은 많이 사용하는 부분이다.