2

私はクラスについて学んでいて、returnステートメントに問題があります (それはステートメントですか? そう願っています)。プログラムは何も出力せず、何もせずに終了します。

class className:
    def createName(self, name):
        self.name = name
    def displayName(self):
        return self.name
    def saying(self):
        print("Hello %s" % self.name)

first = className()
second = className()

first.createName("Jack")
second.createName("Joy")

first.displayName()
second.displayName()

明らかに間違ったことをしていることはわかっていますが、実際には何が何なのかわかりません。助けていただければ幸いです。

4

1 に答える 1

7

あなたの質問に答えるために-何も出力returnしませんが、インタラクティブなPythonプロンプト最後のステートメントの値を出力するので、少し混乱します。例:

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2

ただし、内容を含むファイルを作成し1+1てPythonスクリプトとして実行すると、何も出力されません。

あなたは初心者だと言っているので、コードを改善する方法についていくつかの指針を示します。

class className:
    def createName(self, name):
        self.name = name
    def displayName(self):
        return self.name
    def saying(self):
        print("Hello %s" % self.name)

className冗長性があるので、クラスの名前を変更する必要があります。Nameまた、新しいスタイルのクラスは常に継承する必要がobjectあるため、定義を少し変更してみましょう。

class Name(object):
    def createName(self, name):
        self.name = name
    def displayName(self):
        return self.name
    def saying(self):
        print("Hello %s" % self.name)

何かを作成することは、classesメソッドをオーバーライドすることによって自動的に行われます。__init__()例えば:

class Name(object):
    def __init__(self, name):
        self.name = name
    def displayName(self):
        return self.name
    def saying(self):
        print("Hello %s" % self.name)

このようにして、クラスをインスタンス化するときに名前をすでに初期化できます。

first = Name("Jack")

第二に、メソッドをオーバーライドdisplayすることによって慣用的に処理されます。__repr__

class Name(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
       return self.name
    def saying(self):
        print("Hello %s" % self.name)

このように、あなたは2つのことをする必要があるだけです:

>>> n = Name("Jack")
>>> print n
Jack
于 2012-08-09T06:12:34.640 に答える