1

したがって、イテレータが何であるかを知っていると、次のことが可能であるため、文字列は反復可能なオブジェクトであると想定します。

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が反復可能であるかは示されていません。

文字列オブジェクト内で、サブクラス化された文字列を反復処理するにはどうすればよいですか?

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 に答える