Python-typing: 유형 치수 및 지원 모든 유형 상세 정보

Any docs

Any는 특별한 유형입니다.


정적 유형 검사자는 모든 유형을 Any와 호환되는 것으로 간주하고 반대로 Any도 모든 유형과 호환됩니다.
즉, 유형이 Any인 값에 대해 모든 작업 또는 메서드를 호출하여 변수에 값을 지정할 수 있습니다.

from typing import Any
a = None    # type: Any
a = []      # OK
a = 2       # OK
s = ''      # type: str
s = a       # OK
def foo(item: Any) -> int:
    # Typechecks; 'item' could be any type,
    # and that type might have a 'bar' method
    item.bar()
    ...
주의해야 할 것은 모든 유형의 값을 다른 구체적인 유형에 부여할 때 Python은 유형 검사를 실행하지 않는다는 것이다.예를 들어 a를 s에 부여할 때 s가str 형식으로 선언되더라도 실행할 때 int 값을 수신하면 정적 형식 검사기가 틀리지 않습니다.
또한 반환값이 유형이 없거나 인삼이 유형이 없는 모든 함수는 기본적으로 Any 유형을 사용합니다.

def legacy_parser(text):
    ...
    return data
# A static type checker will treat the above
# as having the same signature as:
def legacy_parser(text: Any) -> Any:
    ...
    return data
동적 유형과 정적 유형의 코드를 혼용해야 할 때, 상술한 행위는 Any를 응급 출구로 사용할 수 있다.

Any와 object의 행동 대비.


Any와 비슷하게 모든 유형은 object의 하위 유형입니다.그러나 Any와 달리 성립되지 않습니다:object는 다른 모든 종류의 하위 형식이 아닙니다.
이것은 값의 형식이object일 때 형식 관리자가 거의 모든 동작을 거부한다는 것을 의미합니다.지정한 형식의 변수에 값을 부여하는 것은 형식 오류입니다.
예:

def hash_a(item: object) -> int:
    # Fails; an object does not have a 'magic' method.
    item.magic()
    ...
def hash_b(item: Any) -> int:
    # Typechecks
    item.magic()
    ...
# Typechecks, since ints and strs are subclasses of object
hash_a(42)
hash_a("foo")
# Typechecks, since Any is compatible with all types
hash_b(42)
hash_b("foo")
object를 사용하면 모든 형식을 안전하게 호환할 수 있는 값을 표시합니다.Any를 사용하여 동적으로 정의된 값 유형을 나타냅니다.
추가:python3.5 typing - 형식 표시 지원
함수는 다음과 같이 문자열을 받아들이고 되돌려줍니다.

def greeting(name: str) -> str:
    return 'Hello' + name
함수greeting에서 매개 변수name는str 형식을 예상하고str 형식을 되돌려줍니다.하위 유형은 매개변수로 허용됩니다.

1.1. 유형 별칭


형 앨리어스는 유형을 앨리어스에 할당하여 정의됩니다.이 예에서 Vector와 List[float]는 서로 바꿀 수 있는 동의어로 간주됩니다.

from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]
# typechecks; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])

유형 별칭은 복잡한 유형 서명을 간소화하는 데 사용됩니다.


예:

from typing import Dict, Tuple, List
ConnectionOptions = Dict[str, str]
Address = Tuple[str, int]
Server = Tuple[Address, ConnectionOptions]
def broadcast_message(message: str, servers: List[Server]) -> None:
    ...
# The static type checker will treat the previous type signature as
# being exactly equivalent to this one.
def broadcast_message(
        message: str,
        servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:
    ...
None은 유형 힌트로 특수한 상황이며 type(None)으로 대체됩니다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기