“字符串式”和“字节式”是什么意思?

时间:2018-01-12 09:11:17

标签: python string

阅读Python类型时,描述string-likebyte-like引起了我的注意。我无法找到一个正确的定义,这些正确的含义以及如何正确使用这些术语。我在以下部分的Python Cookbook中阅读了以下内容:

  

basestringstrunicode类型的公共基类,用户代码可能定义的任何类似字符串的类型也应该是子类{ {1}},只是为了确保此类basestring测试按预期工作。

现在说从isinstance派生的任何内容都可以被视为类似字符串,这是正确的吗?即使是basestring的原因,还是返回类型?

1 个答案:

答案 0 :(得分:4)

<type>-like就像该类型一样的任何对象。 Python广泛依赖于 duck typing ;如果它像鸭子一样走路和嘎嘎叫,它一只鸭子。如果它的行为像一个字符串,它可能就是一个。

因此,文档告诉您,如果您要创建一个希望在任何地方被视为字符串的自定义类型,则可能需要创建子类basestring。这样,任何明确想要使用isinstance(obj, basestring)测试字符串类型(字节或unicode文本)的代码也会接受您的自定义类型。

您仍然需要实施最小的预期方法集;从basestring继承而来,不可思议地使你的类型工作。那个最小集合取决于你试图欺骗的代码是如何操纵字符串的。你的类型必须是类似字符串的足够的来欺骗你使用你的类型的任何东西。

是的,这是故意模糊的,并非所有代码都可以被欺骗(某些内置函数和类型希望能够在字符串对象上使用C API,甚至可以进入{{1} } internals)。通常,只需将strstr子类化为更加容易,以确保不会遗漏任何内容。

该语言已经从这些基类中脱离出来,并且已经定义了abstract base classes,它与hooks for customising subclass and instance checks一起被推荐用于在一次检查中进行鸭子输入。