回答:
3.0より前のバージョンのPythonでは、「プレーン文字列」と「ユニコード文字列」の2種類の文字列があります。プレーンな文字列(str)は、ラテンアルファベット以外の文字を表すことはできません(コードページの詳細を無視して簡単にします)。Unicode文字列(unicode)は、クリンゴン語などの架空の文字を含む任意のアルファベットの文字を表すことができます。
それでは、なぜ2種類の文字列があるのでしょうか?それはすべてのケースをカバーするので、Unicodeだけを持っている方が良いでしょうか?まあ、Unicodeだけを使う方がいいですが、PythonはUnicodeが文字列を表現するための好ましい方法になる前に作成されました。多くのユーザーがいる言語で文字列型を移行するには時間がかかります。Python3.0では、すべての文字列がUnicodeであることが最終的に当てはまります。
3.0より前のPython文字列の継承階層は次のとおりです。
object
|
|
basestring
/ \
/ \
str unicode
Python 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
basestringとstrし、bytes両方のサブクラスをobject直接。ただし、Py2 strはPy3と同じではないため、これは理にかなっていることに注意してくださいbytes。basestringPy3はのみを持つ「文字列」と考える必要がありstrます。したがって、2to3ツールはに置き換えbasestringられstrます。
strとbyteの、まだ子供たちはbasestring?これについてのメモを追加する価値があります。