阅读关于Python类型的描述string-like
或byte-like
引起了我的注意。我找不到一个恰当的定义,这些词到底是什么意思,以及如何恰当地使用这些术语。例如,我在Python Cookbook
中阅读了以下部分:
basestring
is a common base class for thestr
andunicode
types, and any string-like type that user code might define should also subclassbasestring
, just to make sure that suchisinstance
testing works as intended.
那么现在说从basestring
派生的任何东西都可以被认为是类似于字符串的是正确的吗?甚至比什么使它string-like
,它的返回类型?你知道吗
<type>-like
是任何行为类似于该类型的对象。Python广泛依赖于duck类型;如果它像鸭子一样走路和呱呱叫,它就是鸭子。如果它的行为像一个字符串,它可能是一个。你知道吗因此,文档告诉您,如果要创建一个自定义类型,希望在任何地方都像字符串一样对待,那么可以将
basestring
子类化。这样,任何明确希望使用isinstance(obj, basestring)
测试字符串类型(字节或unicode文本)的代码也将接受您的自定义类型。你知道吗您仍然需要实现最少的预期方法集;从
basestring
继承不会神奇地使您的类型工作。最小集取决于要复制的代码如何操作字符串。你的类型必须像字符串一样足够来复制你使用的类型。你知道吗是的,这是故意含糊其辞的,并不是所有的代码都可以被复制(一些内置函数和类型希望能够在字符串对象上使用capi,甚至可以访问
str
内部)。通常,只对str
或unicode
进行子类化比较容易,以确保没有遗漏任何内容。你知道吗此后,该语言不再使用此类基类,而是定义了abstract base classes,现在推荐使用hooks for customising subclass and instance checks和abstract base classes在一次检查中进行duck类型输入。你知道吗
相关问题 更多 >
编程相关推荐