[python] isinstance ( ‘aaa’, basestring)와 isinstance ( ‘aaa’, str)의 차이점은 무엇입니까?

a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true



답변

3.0 이전의 Python 버전에는 “일반 문자열”과 “유니 코드 문자열”이라는 두 종류의 문자열이 있습니다. 일반 문자열 ( str)은 라틴 알파벳 이외의 문자를 나타낼 수 없습니다 (단순화를 위해 코드 페이지의 세부 사항은 무시). 유니 코드 문자열 ( unicode)은 Klingon과 같은 가상의 문자를 포함하여 모든 알파벳의 문자를 나타낼 수 있습니다.

그렇다면 두 종류의 문자열이있는 이유는 모든 경우를 다루기 때문에 유니 코드를 갖는 것이 낫지 않습니까? 글쎄, 유니 코드 만 갖는 것이 낫지 만 유니 코드가 문자열을 나타내는 데 선호되는 방법 전에 파이썬이 만들어졌습니다. 많은 사용자가있는 언어에서 문자열 유형을 전환하는 데 시간이 걸리며, Python 3.0에서는 모든 문자열이 유니 코드 인 경우가 있습니다.

3.0 이전의 Python 문자열의 상속 계층 구조는 다음과 같습니다.

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

파이썬 2.3에서 소개 된 ‘basestring’은 객체가 인스턴스인지 str또는 인스턴스인지를 확인하는 데 사용될 수 있으므로 문자열 통합 방향의 단계로 생각할 수 있습니다.unicode

>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True


답변

모든 문자열은 기본 문자열이지만 유니 코드 문자열은 str 유형이 아닙니다. 대신 이것을 시도하십시오 :

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False


답변

실제로 당신이 요구하는 것은 기본 문자열과 str 클래스의 차이점입니다.

Str은 basestr에서 상속받은 클래스입니다. 그러나 유니 코드 문자열은 다른 문자열과 마찬가지로 존재하기 때문에 존재합니다.

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True


답변

Basestring은 문자열의 슈퍼 클래스입니다. 귀하의 예에서 a는 “str”유형이므로 기본 문자열이자 str입니다.


답변