2019년 5월 6일 월요일

python 언더라인,언더스코어( _) + 표기법 관련


Python에서 __init__ 이나 __str__과 같은 함수를 종종 보았는데 그냥 뭔가 중요하고 내부적으로

돌아가는 함수라 생각하기만 했을뿐 제대로 찾아본적이 없었기에 한번 정리를 하려 한다.




일단 _(단일 언더라인)은 네이밍에 사용되는 경우가 있어서 이를 먼저 보고가자



표기법 관련



스네이크 표기법 ( firstword_secondword )


    Python 변수명, 함수명, 메소드명에 사용



낙타(camel) 표기법 ( firstwordSecondword ) 

  
    JAVA에서 많이 사용



파스칼(pascal) 표기법 ( FirstwordSecondword )


    class의 선언과 같은 경우에 사용



헝가리안 표기법 ( chmyword )

    접두어에 변수가 지닌 속성을 표기한다 (b : 불리언 str : 문자 등....)
    하지만 지금은 지양되는 방법이라 한다




언더라인(언더스코어) 사용법



첫번째 


    for _ in range(10):
        print(_)

    뭐 이렇게 사용되는것으로 보아 _도 i와 같은 기능을 수행할 수 있는데
 
 
    x, *_, y = (1,2,3,4)   # x = 1, y =4

    이런식으로 특정 부분의 문자를 의미없이 임시로 대체하고 싶을때 사용한다



두번째

    ☝ name_   :  파이썬 키워드와의 충돌을 막기위해 사용된다.

    ☝ __name__  :  사용자가 짓는 이름과 충돌을 막기위해서 Python system이 편의를 위해 사용
                       대게 이런 메서드나 변수는 특별한 기능을 제공하거나 수행(예약되어있음)


    ☝ _name  : 사용자가 private 하게 variable을 만들때 사용
                (단 import되는 경우만 private하게 막아주고 직접 호출하는 경우에는 막을수 없다 = 파이썬은 완벽한 private을 지원하지 않는다)
           

    ☝ __namenamemangles 관련된 사항으로 이를 사용하기 위해서는 좀더 명확하게 사용해야한다

        namemangles : 프로그램에서 함수를 선언하거나 전역변수등 선언시
                             컴파일러의 특징에 따라 일정한 규칙을 통해 함수, 변수명이 변경된다

        왜 변경되는가? : Function Overloading을 방지하기 위한 방법으로 동일한 이름으로 다른 기능을 하는 함수를 선언하게 되면 
                              각 함수별로 구별하여 사용할수 있게 이름을 부여해준다

     
        사용 예시 :

                class A:
                    def __init__(self):
                        self.__a = 'a'
                        self._b = 'b'

                a = A()
                a._b    >>> 'b'
                a.__a   >>> object has no attribute Error

                a._A__a >>> 'a'


                이런식으로 사용할수 있다.




댓글 없음:

댓글 쓰기

가장 많이 본 글