주어진 특정 유형의 객체인지 여부를 확인할 수 있는 최선의 방법은 무엇입니까? 주어진 타입에 에서 상속됩니다 여부를 검사하고 객체에는 어때?
'O' 여부를 확인할 수 있는 '의 하위 클래스', '또는' str 인스턴스입니다 str 경로재설정 [이신스턴스] (https://docs.python.org/3/library/functions.html # 이신스턴스) (이, canonical" " 될 것이다. 방식).
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)):
이 방법은 대부분의 파이썬 개체의 유형을 확인하고 있다. 확인할 수 없는 것입니다.
Python 은 이후 '그냥' 트리스엑스프트 합니다 덕 타이핑 # 39 의 메서드을 object& 사용하기 원하는 방식으로 이를 사용할 수 있습니다. 그래서 기능을 쓸 수 있다면, t , # 39 는 파일 객체에는 don& 찾고 있는지 it& # 39 의 하위 클래스 파일 ',' 그냥 '에 사용하기 위해 시도하시겠습니까 드라이트 ()' 방법!
물론 때때로 이처럼 좋은 추상화를 이신스턴스 (obj, cls) '와' break down is what you 할 수 있습니다. 그러나 사용 자제.
[질문] 후, 유형이 추가되었습니다 파이썬 힌트 및 답변됨 물었다. 그러나 파이썬 검사할 수 있는 힌트를 입력하십시ᄃ오 추상형데이터타입 매우 다른 방식으로 충스러웠으니 정적으로 입력되었는지 언어이다. 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 있다고 생각하고 있는 것으로 볼 수 있지만, 일정 수준의 " 스피통 officialness".)
이 방법은 다른 정적 타입 검사 유형 검사를 컴파일됨 입력되었는지 있는 언어이다. 시, 파이썬, 유형 검사를 해야 하기 때문에 있는 추상형데이터타입 동적입니다 비용 - - 만약 우리가 이 사건이 발생할 수 있는 올바른 프로그램을 정판됩니다 대해서도 기회가 있을 때마다 주장한다. 불필요한 오류를 일으킬 수도 있습니다 필요한 것보다 더 제한적인 명시성 자료형 검사 (예를 들면 높여줍니까 인수 정말 아무 것도 할 수 있다 '또는' 방식의 나열하십시오 당근이지를 이트레이블 충분하나니?).
업사이드 오브 더 잡을 수 있는 것이 더 이상 앞서 오류 메시지 유형 검사를 명시성 오류뿐만 덕 타이핑. 정확한 요구 사항을 표현할 수 있는 오리 유형: 이벤트여야만 개외부 설명서 (# 39 의 철저하고 정확하게 it& 기대해 본다.) 에서 멀리 떨어진 곳에서 시작된 호환되지 않는 유형 및 오류가 발생할 수 있습니다.
힌트는 python& # 39 의 유형을 지정할 수 있습니다) 이 있는데 여기서 유형 및 점검됩니다 타협을 통해 그 동안 추가 비용 없이 일반적인 코드 실행.
이 '패키지' 는 문자 입력 변수를 사용할 수 있는 힌트를 표현할 수 없이 특정 유형에 필요한 비헤이비어를 추상형데이터타입. 예를 들어, 여기에는 이트레이블 힌트 '와' 요구 '를 호출' 같은 변수를 지정할 수 있는 모든 유형에 대해 해당 비헤이비어를.
힌트는 유형 중 가장 자주 확인 방법을 유형, 파이썬 it& # 39 의 파이썬 전혀 의존하지 않고 더욱 확인란 유형 및 덕 타이핑. 힌트는 비교적 새로운 유형 및 심사위원 여전히 아웃해야 they& 때 가장 파이썬 솔루션이므로 # 39, re 하지만 상대적으로 매우 논쟁의 여지가없는 일반 비교: 힌트 허용하시겠습니까 코드를 생성할 수 있는 일종의 문서용으로 입력하십시ᄃ오 제공하십시오 시행 이전 및 오류를 쉽게 이해할 수 있는 오류를 따라 잡을 수 있을 수 있으며, t # 39 덕 타이핑 can& 체크된다면 정적으로 (하지만 여전히 이례적으로 감지에서 it& # 39 의 외부에 런타임용으로 개발하십시오). 반면, 덕 타이핑, 파이썬, t # 39 는 그동안 오랫동안 운행에서어떠한 doesn& 수출하는 모든 가능한 입력, 보다 자세히, 정적 인지 오버헤드에 동의하십시오 추상형데이터타입 그리고 몇몇군데도 예정이다.
이 때 예를 들어보겠습니다 왜 덕 타이핑 이글거리 없이 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()
isinstance(o, str)
[Https://partner. microsoft. docs] [1]
[1]: https://docs.python.org/2/library/functions.html # 이신스턴스
내 생각에는 Python 언어 사용에 대한 shouldn& # 39 는 정말 멋진 것 같은 동적 확인할 수 없는, 뭐 그런.
난 그냥 security. 메서드을 and catch on your 객체에는 아트리부텔라로 충족되었으며 '필수'. 이렇게 하면 나중에 연락을 서로 다른 임무를 수행할 수 있는 방법 (관련 없어 보이는) 객체에는 조롱하는 등 개체의 테스트.
이 때 사용되는 많이유 i& # 39, ve () '을 (를)' 는 데이터를 얻을 수 있는 웹 끕니까 urllib2.urlopen 되돌려줍니다 file like 객체에는. 이 할 수 있는 거의 모든 선반가공 전달할 수 있는 방법을 파일에서 판독합니다 같은 방법으로 () '는' 읽기 때문에 실제 파일.
그러나 I& # 39, m 확신할 수 없는 시간과 장소 사용을 위한 '이신스턴스 (), 그렇지 않으면, 아마도 wouldn& # 39' t be there:)
우고 데.
아마 짓궂군요 '목록' 을 가리키는 '보다는' 어레이입니다 문제가 있지만, 전체 문자 확인 - # 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 를 넣을 수 있는 단일 값을 전달할 때 그 주위에 필요하다면.
(비록 이 문제가 발생할 수 있습니다 (가) 와 비슷하게, 문장열 때와 같이 추가한다.)
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)
아래 노선은 확인할 때 문자 입력 값이 함께 확인할 수 있습니다.
def chr_type(chrx):
if chrx.isalpha()==True:
return 'alpha'
elif chrx.isdigit()==True:
return 'numeric'
else:
return 'nothing'
chr_type("12)