a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
คำตอบ:
ใน Python เวอร์ชันก่อนหน้า 3.0 มีสตริงสองชนิด "สตริงธรรมดา" และ "สตริง Unicode" สตริงธรรมดา ( str
) ไม่สามารถแสดงอักขระนอกอักษรละติน (ละเว้นรายละเอียดของโค้ดเพจเพื่อความง่าย) สตริง Unicode ( unicode
) สามารถแสดงอักขระจากตัวอักษรใด ๆ รวมถึงตัวละครบางตัวเช่น Klingon
เหตุใดจึงมีสายสองชนิดทำไมจะดีกว่าถ้ามี Unicode ไม่ได้เพราะจะครอบคลุมทุกกรณี มันจะดีกว่าถ้ามีเฉพาะ Unicode แต่ Python ถูกสร้างขึ้นก่อนที่ Unicode จะเป็นวิธีที่ต้องการใช้แทนสตริง ต้องใช้เวลาในการเปลี่ยนประเภทสตริงในภาษาที่มีผู้ใช้หลายคนใน Python 3.0 เป็นกรณีที่สตริงทั้งหมดเป็น Unicode
ลำดับชั้นการสืบทอดของสตริง Python pre-3.0 คือ:
object
|
|
basestring
/ \
/ \
str unicode
'basestring' นำมาใช้ใน Python 2.3 เป็นขั้นตอนในทิศทางของการรวมสตริงที่สามารถใช้เพื่อตรวจสอบว่าวัตถุเป็นอินสแตนซ์ของ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
ไม่ได้เป็นเช่นเดียวกับ bytes
Py3 basestring
ควรจะคิดว่าเป็น "ตัวอักษร" ซึ่ง Py3 เพียง str
แต่มี ดังนั้น2to3
แทนที่เครื่องมือด้วยbasestring
str
สตริงทั้งหมดเป็น basestrings แต่สตริง Unicode ไม่ใช่ชนิด str ลองใช้สิ่งนี้แทน:
>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
จริง ๆ สิ่งที่คุณถามคือความแตกต่างระหว่าง basestring และ str ชั้น
Str เป็นคลาสที่สืบทอดจาก basestr แต่ยังมีสตริง unicode เช่นเดียวกับสตริงอื่นถ้าคุณต้องการสร้าง
>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
Basestring เป็นซูเปอร์คลาสของสตริง ในตัวอย่างของคุณ a คือประเภท "str" ดังนั้นจึงเป็นทั้ง basestring และ str
str
และbyte
เด็กยังคงbasestring
? น่าจะเพิ่มการบันทึกเกี่ยวกับเรื่องนี้