Python으로 유형 지정

12332 단어 Python3Python
파이톤은 동적 유형 언어이기 때문에 기본적으로 유형을 의식할 필요가 없다.
그러나 VS 코드와 같은 IDE에서는 지식인이 효과가 없다고 느끼기 때문이다
어떤 데이터 유형을 전달했는지 추측하면서 쓸 필요가 있다.
정태적인 고정된 언어에 익숙해진 사람에게는 고통스러운 일이다.

typing 사용


3.5부터 typing 모듈을 표준으로 설정
유형 힌트를 지원합니다.
실행 중 오류 없음
VS 코드를 인코딩할 때 다음 동작을 수행할 수 있습니다.
  • 유형에 따라 스마트 알림
  • 정의 유형을 전달하지 않은 상태에서 오류 표시
  • 기본용법


    함수 또는 변수 정의에 사용
  • 함수 정의:
  • 반환값이 있는 경우:def func(args:형)->형:
  • 반환값이 없을 때: def funca(args:형)->NoReturn: ※ from typing import NoReturn
  • 종류는str와 int 등 다양한 종류를 지정할 수 있습니다

    유형 힌트로 자신의 카테고리를 지정합니다.


    어떡하지?typing 모듈의 문서를 검색합니다.
    typing.타입()이라는 함수가 있기 때문에 이것을 시험해 보기로 했습니다.
    입문 Python 3의 예제를 살짝 바꿔볼게요.
    class_test.py라는 반을 설립하여 그 행위를 확인하다
    class_test.py
    import typing as tp
    
    class Tail():
        def __init__(self, tail:str):
            self.__tail = tail
        @property
        def tail(self) -> str:
            return(self.__tail)
        @tail.setter
        def tail(self,tail:str):
            self.__tail = tail
    
    
    class pBill():
        """型指定なし
        """
        def __init__(self, description):
            self.__description = description
        @property
        def description(self):
            return(self.__description)
        @description.setter
        def description(self,description):
            self.__description = description
    
    
    class Bill():
        """型指定あり
        """
        def __init__(self, description:str):
            self.__description = description
        @property
        def description(self) -> str:
            return(self.__description)
        @description.setter
        def description(self,description:str):
            self.__description = description
    
    
    class pDack():
        """型指定なし
        """
        def __init__(self, bill, tail):
            self.bill = bill
            self.tail = tail
        def about(self):
            print("This duck has a ",self.bill.description," and tail=",self.tail.tail)
    
    class Dack():
        """型指定あり
        """
        def __init__(self, bill:tp.Type[Bill], tail:tp.Type[Tail]):
            self.bill = bill
            self.tail = tail
        def about(self):
            print("This duck has a ",self.bill.description," and tail=",self.tail.tail)
    
    
    cbill = Bill('くちばし')
    ctail = Tail('しっぽ')
    cdack = Dack(cbill,ctail)
    cdack.about()
    
    ### 以下のコードは実行時エラーなし のはず
    bill = Bill([]) 
    tail = Tail({}) 
    dack = Dack(bill,tail) 
    dack2 = Dack(1,2) 
    dack.about()
    
    
    우선 행동의 확인부터 시작한다.
    class_test.py를 실행해 보세요.
    예상한 대로 오류가 발생하지 않을 것이다
    terminal
    $ python class_test.py
    This duck has a  くちばし  and tail= しっぽ
    This duck has a  []  and tail= {}
    
    이어 지식인의 행동을 확인한다.
    유형 지정이 없는 경우
    self.왜냐하면 빌이 어떤 유형이 있을지 명확하지 않아요.
    self.bill. 때려도 상관없어.

    특정 유형이 있는 경우
    self.왜냐하면 빌 클래스는 빌에게 확실하게 맡기는 거니까.
    self.bill.이렇게 때리면 지식인의 감각이 드러난다.
    또한 description은str형입니다.

    보태다


    tp.Type[Bill] 같은 게 길지 않아도.
    일반적인 변수와 같다. 반 이름은 문제없을 것 같다.
    이게 더 상큼해.
    python
    class Dack():
        """型指定あり
        """
        def __init__(self, bill:Bill, tail:Tail):
            self.bill = bill
            self.tail = tail
        def about(self):
            print("This duck has a ",self.bill.description," and tail=",self.tail.tail)
    

    참고 자료


    typing-유형 힌트 지원
    파이톤으로 시작된 스타일리시한 세상

    좋은 웹페이지 즐겨찾기