我知道python具有len()
用于确定字符串大小的函数,但是我想知道为什么它不是字符串对象的方法。
好吧,我意识到我是一个尴尬的错误。__len__()
实际上是字符串对象的方法。在字符串对象上使用len函数在Python中看到面向对象的代码似乎很奇怪。此外,看到__len__
名字而不是len也很奇怪。
字符串确实有一个length方法: __len__()
Python中的协议是在具有一定长度并使用内置len()
函数的对象上实现此方法,该函数将为您调用该方法,类似于您实现__iter__()
和使用内置iter()
函数的方法(或在后面调用方法)场景)在可迭代的对象上。
有关更多信息,请参见模拟容器类型。
这是有关Python协议主题的好书:Python和最小惊讶原则
问题内容: Python的Zen指出,只有一种方法可以做事情-但我经常遇到决定何时使用函数以及何时使用方法的问题。 让我们举一个简单的例子- ChessBoard对象。假设我们需要某种方式使董事会上所有合法的King举动均可用。我们写ChessBoard.get_king_moves()还是get_king_moves(chess_board)? 我得到的答案基本上没有定论: 为什么Python使
我的讲师在课堂上问过我这个问题,我想知道为什么是宏而不是函数?
问题内容: 为什么这样 代替这个 问题答案: 因为如果抛出异常,则 除非 捕获到异常, 否则 在执行 该块之后没有任何代码。一个块总是执行,不管你里面发生了什么块。 __
问题内容: 例: Python是(非常)面向对象的,我不理解为什么对象不继承“ len”功能。另外,我一直在尝试错误的解决方案,因为它对我来说似乎是合乎逻辑的 问题答案: Guido的解释在这里: 首先,出于HCI的原因,我选择len(x)而不是x.len()(def len ()来得晚)。实际上,HCI有两个相互交织的原因: (a)对于某些运算,前缀表示法比后缀读得更好-前缀(和infix!)运
问题内容: 对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案: 为什么我要创建一个单例(无状态)而不使用静态方法? 如果对象没有状态,为什么需要一个对象实例? 问题答案: 通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。) 但是,在一些极端情况下,甚至 无状态 单例也可能有用: 您希望在可预见的将来用状态扩展它。 由于某些特定的 技术 原因,
我使用.callbase()是为了从TsExporter类中执行.export()方法的mock后面的实际代码。 在另一边,.retrieveTranslations()也在执行真实的代码,而不是像“我告诉它这样做”那样返回模拟值。 代码如下: 我错过了什么? 谢谢你!