# 39 의 정식 what& 확인할 수 있는 방법을 문자용 파이썬?

주어진 특정 유형의 객체인지 여부를 확인할 수 있는 최선의 방법은 무엇입니까? 주어진 타입에 에서 상속됩니다 여부를 검사하고 객체에는 어때?

39 의 객체를 말하도다 let& 나는 'o'. # 39, str 'a' s it& 있는지 어떻게 합니까?

질문에 대한 의견 (4)
해결책

'O' 여부를 확인할 수 있는 '의 하위 클래스', '또는' str 인스턴스입니다 str 경로재설정 [이신스턴스] (https://docs.python.org/3/library/functions.html # 이신스턴스) (이, canonical&quot &quot 될 것이다. 방식).

if isinstance(o, str):

'O' 는 '여부를 확인할 수 있는 유형을 정확히 str' (제외할지 하위 클래스):

if type(o) is str:

또한 경우에 따라 다음 작품, 및 유용할 수 있습니다.

if issubclass(type(o), str):

파이썬 라이브러리 참조 기능을 내장한 에서 참조로는 관련 정보.

한 번 더 참고: 이 경우, 실제로 사용할 수 있습니다 # 39 를 사용하여 you& 파이썬 2 re:

if isinstance(o, basestring):

또한 유니코드 문자열을 따라 잡을 수 있기 때문에 (['유니코드'] (https://docs.python.org/2/library/functions.html # 유니코드) 의 하위 클래스 ',' str 아니다. 유니코드 '이' 와 '모두' str 의 하위 클래스 ['배서스트링'] (https://docs.python.org/2/library/functions.html # 배서스트링)). 참고로, 여기서 '배서스트링' 더 이상 존재하는 there& # 39 의 파이썬 3 [엄격한 분판] (https://docs.python.org/3.0/whatsnew/3.0.html # 유니코드 텍스트 vs 대신 vs 8 비트 데이터) 의 문장열 (['str'] (https://docs.python.org/3/library/functions.html # func str) 와 이진 데이터 (['바이트입니다'] (https://docs.python.org/3/library/functions.html # func 바이트입니다)).

또는 튜플 수업 ',' 이신스턴스 수 있습니다. 이 경우 모든 하위 클래스의 인스턴스입니다 반환되므로 flashcopy 어떤 x (str, 유니코드):

if isinstance(o, (str, unicode)):
해설 (6)

이 방법은 대부분의 파이썬 개체의 유형을 확인하고 있다. 확인할 수 없는 것입니다.

Python 은 이후 '그냥' 트리스엑스프트 합니다 덕 타이핑 # 39 의 메서드을 object& 사용하기 원하는 방식으로 이를 사용할 수 있습니다. 그래서 기능을 쓸 수 있다면, t , # 39 는 파일 객체에는 don& 찾고 있는지 it& # 39 의 하위 클래스 파일 ',' 그냥 '에 사용하기 위해 시도하시겠습니까 드라이트 ()' 방법!

물론 때때로 이처럼 좋은 추상화를 이신스턴스 (obj, cls) '와' break down is what you 할 수 있습니다. 그러나 사용 자제.

해설 (16)

'이신스턴스 (o, str)' 는 'o' 는 'str' 또는 'True' 반환되므로 경우 해당 유형의 상속됩니다 '에서' str.

'유형' (o) 는 'o' 는 'True' 반환되므로 str 경우에만 str. 이 경우 '거짓' 'o' 이 유형에 반환되므로 상속됩니다 '에서' str.

해설 (3)

[질문] 후, 유형이 추가되었습니다 파이썬 힌트 및 답변됨 물었다. 그러나 파이썬 검사할 수 있는 힌트를 입력하십시ᄃ오 추상형데이터타입 매우 다른 방식으로 충스러웠으니 정적으로 입력되었는지 언어이다. Python 에서 힌트를 유형에 따라 관련 데이터를 접근할 수 있는 기능을 갖춘 걱정했던것 연관시킵니다 가지유형의 인수만 런타임용으로 개발하십시오 기능과 이 유형에 대한 검사했어요 수 있습니다. 힌트 uxfs 유형 문법.

def foo(i: int):
    return i

foo(5)
foo('oops')

이 경우 우리가 원하는 오류가 트리거됩니다 푸 (& # 39, oops& # 39;) "에 대한 주석을 단 인수 이후 유형 '는' int '. 오류가 발생할 때 발생하는 것으로 추가된 유형 힌트 언약보다는 스크립트가 정상적으로 실행됩니다. 하지만 이 기능을 사용할 수 있는 다른 유형을 설명하는 자도으로 속성이 프로그래밍합니다 쿼리하고 문자용 오류를 확인할 수 있을 것으로 보인다.

다른 프로그램 중 하나를 사용할 수 있는 유형을 찾으려면 오류: '미피':

mypy script.py
script.py:12: error: Argument 1 to "foo" has incompatible type "str"; expected "int"

(설치해야 할 수 있습니다 '에서' 미피 패키지 관리자. 내가 don& # 39, t 있다고 생각하고 있는 것으로 볼 수 있지만, 일정 수준의 &quot 스피통 officialness&quot.)

이 방법은 다른 정적 타입 검사 유형 검사를 컴파일됨 입력되었는지 있는 언어이다. 시, 파이썬, 유형 검사를 해야 하기 때문에 있는 추상형데이터타입 동적입니다 비용 - - 만약 우리가 이 사건이 발생할 수 있는 올바른 프로그램을 정판됩니다 대해서도 기회가 있을 때마다 주장한다. 불필요한 오류를 일으킬 수도 있습니다 필요한 것보다 더 제한적인 명시성 자료형 검사 (예를 들면 높여줍니까 인수 정말 아무 것도 할 수 있다 '또는' 방식의 나열하십시오 당근이지를 이트레이블 충분하나니?).

업사이드 오브 더 잡을 수 있는 것이 더 이상 앞서 오류 메시지 유형 검사를 명시성 오류뿐만 덕 타이핑. 정확한 요구 사항을 표현할 수 있는 오리 유형: 이벤트여야만 개외부 설명서 (# 39 의 철저하고 정확하게 it& 기대해 본다.) 에서 멀리 떨어진 곳에서 시작된 호환되지 않는 유형 및 오류가 발생할 수 있습니다.

힌트는 python& # 39 의 유형을 지정할 수 있습니다) 이 있는데 여기서 유형 및 점검됩니다 타협을 통해 그 동안 추가 비용 없이 일반적인 코드 실행.

이 '패키지' 는 문자 입력 변수를 사용할 수 있는 힌트를 표현할 수 없이 특정 유형에 필요한 비헤이비어를 추상형데이터타입. 예를 들어, 여기에는 이트레이블 힌트 '와' 요구 '를 호출' 같은 변수를 지정할 수 있는 모든 유형에 대해 해당 비헤이비어를.

힌트는 유형 중 가장 자주 확인 방법을 유형, 파이썬 it& # 39 의 파이썬 전혀 의존하지 않고 더욱 확인란 유형 및 덕 타이핑. 힌트는 비교적 새로운 유형 및 심사위원 여전히 아웃해야 they& 때 가장 파이썬 솔루션이므로 # 39, re 하지만 상대적으로 매우 논쟁의 여지가없는 일반 비교: 힌트 허용하시겠습니까 코드를 생성할 수 있는 일종의 문서용으로 입력하십시ᄃ오 제공하십시오 시행 이전 및 오류를 쉽게 이해할 수 있는 오류를 따라 잡을 수 있을 수 있으며, t # 39 덕 타이핑 can& 체크된다면 정적으로 (하지만 여전히 이례적으로 감지에서 it& # 39 의 외부에 런타임용으로 개발하십시오). 반면, 덕 타이핑, 파이썬, t # 39 는 그동안 오랫동안 운행에서어떠한 doesn& 수출하는 모든 가능한 입력, 보다 자세히, 정적 인지 오버헤드에 동의하십시오 추상형데이터타입 그리고 몇몇군데도 예정이다.

해설 (3)

이 때 예를 들어보겠습니다 왜 덕 타이핑 이글거리 없이 vmnet 위험하다. 예를 들면 다음과 같습니다. 다음은 파이썬 코드 (또는 생략 이벤트수정적절한 들여쓰기), 이는 상황은 피할 수 있도록 기능을 수행함으로써 이신스턴스 및 아서브클라소프 잘 때, 당신은 정말로 필요한 오리 don& # 39, t get a bomb.

class Bomb:
    def __init__(self):
        ""

    def talk(self):
        self.explode()

    def explode(self):
        print "BOOM!, The bomb explodes."

class Duck:
    def __init__(self):
        ""
    def talk(self):
        print "I am a duck, I will not blow up if you ask me to talk."    

class Kid:
    kids_duck = None

    def __init__(self):
        print "Kid comes around a corner and asks you for money so he could buy a duck."

    def takeDuck(self, duck):
        self.kids_duck = duck
        print "The kid accepts the duck, and happily skips along"

    def doYourThing(self):
        print "The kid tries to get the duck to talk"
        self.kids_duck.talk()

myKid = Kid()
myBomb = Bomb()
myKid.takeDuck(myBomb)
myKid.doYourThing()
해설 (14)
isinstance(o, str)

[Https://partner. microsoft. docs] [1]

[1]: https://docs.python.org/2/library/functions.html # 이신스턴스

해설 (1)

내 생각에는 Python 언어 사용에 대한 shouldn& # 39 는 정말 멋진 것 같은 동적 확인할 수 없는, 뭐 그런.

난 그냥 security. 메서드을 and catch on your 객체에는 아트리부텔라로 충족되었으며 '필수'. 이렇게 하면 나중에 연락을 서로 다른 임무를 수행할 수 있는 방법 (관련 없어 보이는) 객체에는 조롱하는 등 개체의 테스트.

이 때 사용되는 많이유 i& # 39, ve () '을 (를)' 는 데이터를 얻을 수 있는 웹 끕니까 urllib2.urlopen 되돌려줍니다 file like 객체에는. 이 할 수 있는 거의 모든 선반가공 전달할 수 있는 방법을 파일에서 판독합니다 같은 방법으로 () '는' 읽기 때문에 실제 파일.

그러나 I& # 39, m 확신할 수 없는 시간과 장소 사용을 위한 '이신스턴스 (), 그렇지 않으면, 아마도 wouldn& # 39' t be there:)

해설 (1)

우고 데.

아마 짓궂군요 '목록' 을 가리키는 '보다는' 어레이입니다 문제가 있지만, 전체 문자 확인 - # 39 다운로드되었는지 객체에는 don& 있습니다 싶지 않다, 문제가 있는 목록, you want to 다운로드되었는지 it& # 39 의 함정이거나 시퀀스나 it& # 39 의 경우 하나의 개체를. 그래서 마치 시퀀스일 사용하려고 합니다.

말하도다 객체에는 추가할 경우, 또는 기존 조합으 it& # 39 의 시퀀스일 개체, 그들 모두 추가

try:
   my_sequence.extend(o)
except TypeError:
  my_sequence.append(o)

이것은 하나의 트릭 함께 작업하는 경우 문장열 및 / 또는 문자열 - # 39 의 시퀀스에만 that& 문자열로 생각할 수 있지만, 종종 까다로운, 하나의 개체로 it& # 39, s 도 시퀀스일 성장했다. # 39 에 있는 it& 밑구녕만도 등 일련의 하나의 길이 써줬지 정말

난 보통 내 API 를 사용할 수 있도록 설계 디렉토리에만 인컨텍스트 시퀀스일 - 따라서 단일 값으로 셨으며 간편해집니다. [] ',' S not 교차색 it& # 39 를 넣을 수 있는 단일 값을 전달할 때 그 주위에 필요하다면.

(비록 이 문제가 발생할 수 있습니다 (가) 와 비슷하게, 문장열 때와 같이 추가한다.)

해설 (0)

I like & # 39 더 복잡한 유형: validations 티퍼가드 에 따라 주석입니다 외곽진입 검증하는 파이썬 유형 힌트:

from typeguard import check_type
from typing import List

try:
    check_type('mylist', [1, 2], List[int])
except TypeError as e:
    print(e)

매우 복잡한 validations 아주 깨끗하고 판독값 패션 수행할 수 있습니다.

check_type('foo', [1, 3.14], List[Union[int, float]])
# vs
isinstance(foo, list) and all(isinstance(a, (int, float)) for a in foo) 
해설 (0)

유형의 __name__ 사용하여 변수 문자용 확인할 수 있습니다.

예:

>>> a = [1,2,3,4]  
>>> b = 1  
>>> type(a).__name__
'list'
>>> type(a).__name__ == 'list'
True
>>> type(b).__name__ == 'list'
False
>>> type(b).__name__
'int'
해설 (1)

아래 노선은 확인할 때 문자 입력 값이 함께 확인할 수 있습니다.

def chr_type(chrx):
    if chrx.isalpha()==True:
        return 'alpha'
    elif chrx.isdigit()==True:
        return 'numeric'
    else:
        return 'nothing'

chr_type("12)
해설 (2)