2012-11-22 171 views
1

因此,瞭解一個迭代器是什麼,我assumign一個字符串是一個迭代對象,因爲可能有如下優點:可迭代字符串

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

當然,方法對象是不可迭代的。而你試圖遍歷一個: - '__str__' –

回答

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): 
+1

明白了,所以只是一個問題,我發現Python的文檔頁面很糟糕。我在哪裏可以找到'str'對象doc頁面?不是教會我如何使用字符串的頁面,而是實際的文檔頁面以及所有方法等... – darksky

+0

@Darksky:尋找標準類型頁面:['str'是序列類型的一部分](http: //docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange),另外還有一個['str'特定的方法部分](http:/ /docs.python.org/2/library/stdtypes.html#string-methods)。 –

2

只是for c in self應該做的。由於self是一個字符串,因此您可以迭代字符。

for c in self.__str__不起作用,因爲__str__是一種方法,您必須調用它(但在這種情況下無效)。

0

如果您明確需要調用__str__掛鉤,則可以通過str(self)(推薦)或self.__str__()(不建議,作爲樣式)調用掛鉤。

self.__str__只是指該名稱的方法對象,而不是調用它。