“stringlike”和“bytelike”是什么意思?

2024-04-20 01:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

阅读关于Python类型的描述string-likebyte-like引起了我的注意。我找不到一个恰当的定义,这些词到底是什么意思,以及如何恰当地使用这些术语。例如,我在Python Cookbook中阅读了以下部分:

basestring is a common base class for the str and unicode types, and any string-like type that user code might define should also subclass basestring, just to make sure that such isinstance testing works as intended.

那么现在说从basestring派生的任何东西都可以被认为是类似于字符串的是正确的吗?甚至比什么使它string-like,它的返回类型?你知道吗


Tags: and类型forbasestringthat定义is
1条回答
网友
1楼 · 发布于 2024-04-20 01:31:17

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

因此,文档告诉您,如果要创建一个自定义类型,希望在任何地方都像字符串一样对待,那么可以将basestring子类化。这样,任何明确希望使用isinstance(obj, basestring)测试字符串类型(字节或unicode文本)的代码也将接受您的自定义类型。你知道吗

您仍然需要实现最少的预期方法集;从basestring继承不会神奇地使您的类型工作最小集取决于要复制的代码如何操作字符串。你的类型必须像字符串一样足够来复制你使用的类型。你知道吗

是的,这是故意含糊其辞的,并不是所有的代码都可以被复制(一些内置函数和类型希望能够在字符串对象上使用capi,甚至可以访问str内部)。通常,只对strunicode进行子类化比较容易,以确保没有遗漏任何内容。你知道吗

此后,该语言不再使用此类基类,而是定义了abstract base classes,现在推荐使用hooks for customising subclass and instance checksabstract base classes在一次检查中进行duck类型输入。你知道吗

相关问题 更多 >