0

編集:私の間違い-別の場所に別のメソッド名(アンダースコア付き)があり、その本体にはパスしかありませんでした。愚かな私。閉じてください。

2つのメソッドを持つクラスがあり、それぞれが単純な文字列を返します。これら2つの方法のわずかな定性的な違いは、一方の名前にアンダースコアが含まれているのに対し、もう一方の方法にはアンダースコアがないことです。ただし、アンダースコアが付いているものは、呼び出されたときに文字列を返しません。メソッド名にアンダースコアを使用することは、メソッド名に関するPEP8ガイドラインに従っているようです。

クラスに関するPythonチュートリアルをよく読んでいますが、メソッド名内でアンダースコアを使用することによる動作の違いについては触れられていません。アンダースコアを削除すると、文字列が返されます。

これは何が原因ですか?

これが私のコードです:

class Board:
    def f(self):
        return 'Hello'
    def print_board(self):
        return 'Hello'

Python3.2.3を使用しています。

4

1 に答える 1

0

Python3.2.1および3.3.0では問題なく動作します。

class Board:
    def f(self):
        return 'Hello'
    def print_board(self):
        return 'Hello'


b = Board()
print(b.f())
print(b.print_board())

Windowsで実行すると、次のように出力されます。

c:\tmp\_Python>c:/python32/python a.py
Hello
Hello

c:\tmp\_Python>c:/python33/python a.py
Hello
Hello

おそらくあなたは書きたかった:

...
    def print_board(self):
        print('Hello')

そしてそれを呼びます

...
b.print_board()
于 2013-02-07T11:44:27.123 に答える