因此知道迭代器是什么,我假设一个字符串是一个可迭代的对象,因为以下是可能的:
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
中的哪个对象是可迭代的。
如何在我的字符串对象中迭代我的子类字符串?
答案 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__
只是引用该名称的方法对象,而不是调用它。