rueki

파이썬 UnderScore 본문

python

파이썬 UnderScore

륵기 2021. 1. 7. 20:53
728x90
반응형

파이썬 underscore 하면 보통 아래의 예제를 많이 봤을 것이다.

for _ in (range(10)):
    pass

여기서의 역할은 값을 무시하는 역할로 쓰인다.

 

하나의 예시로 unpacking에 대해서 알아보자.

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

튜플로 묶여져있는 값을 각 변수에 하나씩 할당을 해주었는데, 가운데 underscore를 통한 선언했을 때 값이 무시된다는 것을 확인할 수가 있었다.

 

다른 예제를 하나 더 보자.

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

이것을 실행시킬 때, 어떻게 될까?

a와 b는 하나의 값만 들어가기에 각각 1과 5가 될 것이고, *i에는 2,3,4가 들어가게 될 것이다.

 

 

이제 접근 지정자 역할을 하는 underscore에 대해서 알아보자

보통 변수들은 name 이렇게 짓는데 이는 public한 특성을 가지고 있다.

그러나 _name은? 이는 protected, 즉 보호해야하는 변수의 뜻을 가지고 있다.

그럼 클래스에서 흔하게 보이는 __name은? 이는 private한 특성을 가지고 있다.

 

class SampleA:
    def __init__(self):
        self.x = 0
        self.__y = 0
        self._z = 0
        
        
a = SampleA()
a.x = 1 #public 변수
print('Ex2 > x :{}'.format(a.x))
print('Ex2 > y :{}'.format(a._z))

SampleA의 생성자로 x와 y와 z를 각각 선언했다.

여기서 알아야 할 점은  __y가 출력이 될까라는 점이다. 결론은 안 된다. 이는 private 변수로써 할 수가 없다.

_z 값은 변경 가능하나 그렇게 장려되지는 않는다고 한다.

 

그럼 __의 값에는 어떻게 접근을 하고 사용할 수 있을까?

 

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

    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())

객체로 만들어서 값에 접근을 하면 받을 수 있으며 값 변경이 가능한 것을 알 수 있었다.

728x90
반응형

'python' 카테고리의 다른 글

이미지 경로 전처리 및 레이블링 코드  (0) 2021.06.06
CutMix 실습하기  (0) 2021.05.07
Shallow Copy, Deep copy  (0) 2021.01.05
Lambda, reduce, map, filter  (0) 2021.01.05
Variable Scope(변수 범위)  (0) 2021.01.01
Comments