1

所以知道什么是迭代器,我假设一个字符串是一个可迭代的对象,因为以下是可能的:

for c in str:
  print c

我正在继承str和覆盖__hash__and __eq__。在__hash__,我试图迭代字符串如下:

for c in self.__str__:

但是会返回以下错误:TypeError: 'method-wrapper' object is not iterable. 这意味着它__str__是不可迭代的。如何获得字符串的可迭代版本?我尝试在 Python 上查找某种str对象 API,但 Python 的文档只向您展示了如何使用字符串,而不是内部是什么,以及其中的哪个对象str是可迭代的。

如何在我的字符串对象中遍历我的子类字符串?

4

3 回答 3

3

应该for c in self做的。由于self是一个字符串,因此您可以对字符进行迭代。

for c in self.__str__不起作用,因为__str__它是一种方法,您必须调用它(但在这种情况下没用)。

于 2012-11-22T15:10:32.033 回答
1

__str__是另一个钩子方法,而不是字符串的值。

如果这是 的子类str,则可以直接迭代self

for c in self:

或者你可以让它更明确:

for c in iter(self):

如果这不是子类,也许您打算调用 __str__()

for c in self.__str__():

或者您可以避免调用钩子并使用str()

for c in str(self):
于 2012-11-22T15:10:30.133 回答
0

如果你明确需要调用__str__钩子,你可以通过str(self)(推荐)或self.__str__()(不推荐,作为风格问题)来调用它。

self.__str__只是引用该名称的方法对象,而不是调用它。

于 2012-11-22T15:12:37.990 回答