可迭代字符串

时间:2012-11-22 15:09:02

标签: python string iterator

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

for c in str:
  print c

我正在继承str并覆盖__hash____eq__。在__hash__中,我试图按如下方式迭代字符串:

for c in self.__str__:

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

如何在我的字符串对象中迭代我的子类字符串?

3 个答案:

答案 0 :(得分:2)

只需要for c in self即可。由于self是一个字符串,因此您可以对字符进行迭代。

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

答案 1 :(得分:1)

__str__ is another hook method,而不是字符串的值。

如果这是str的子类,您只需迭代self

for c in self:

或者你可以更明确地说明:

for c in iter(self):

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

for c in self.__str__():

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

for c in str(self):

答案 2 :(得分:0)

如果您明确需要调用__str__挂钩,则可以通过str(self)(推荐)或self.__str__()调用它(不推荐,作为样式)。< / p>

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