rueki
파이썬 UnderScore 본문
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