[英]What does 'string-like' and 'byte-like' mean?
阅读有关Python类型的描述时string-like
或string-like
byte-like
的描述引起了我的注意。 我找不到正确的定义,确切的含义以及如何正确使用这些术语。 例如,我在Python Cookbook
阅读了以下部分:
basestring
是str
和unicode
类型的通用基类,用户代码可能定义的任何类似字符串的类型也应basestring
子类,以确保此类isinstance
测试能够按预期进行。
因此,现在说来自basestring
字符串的任何东西都可以被认为是类似字符串的说法现在是正确的吗? 即使是什么使它string-like
,它还是返回类型?
类似于 <type>-like
任何对象都具有与type一样的行为 。 Python广泛依赖鸭子的输入 ; 如果它走路像鸭子一样嘎嘎叫 ,那就是鸭子。 如果它的行为类似于字符串,则可能是一个。
因此,文档告诉您,如果您要创建一个自定义类型,希望在所有地方都将其视为字符串,则可以将basestring
子类basestring
。 这样,任何明确想要使用isinstance(obj, basestring)
测试字符串类型(字节或unicode文本)的isinstance(obj, basestring)
都将接受您的自定义类型。
您仍然必须实现最少的预期方法集; 从basestring
继承不会神奇地使你的类型工作 。 最小设置取决于您要复制的代码如何处理字符串。 您的类型必须足够像字符串,才能复制您正在使用的类型。
是的,这是故意模糊的,并非所有代码都可以重复使用(某些内置函数和类型希望能够在字符串对象上使用C API,甚至可以访问str
内部)。 通常,仅将str
或unicode
子类化以确保不遗漏任何内容,会更容易。
从那以后,该语言就不再使用此类基类,而是定义了抽象基类 ,现在将其与用于自定义子类和实例检查的钩子一起, 成为在一次检查中进行鸭子输入的推荐方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.